假设我有一个跟踪大学课程的应用程序。每门课程都有一些属性,例如name
time
notes
id
. 在应用程序中,用户可以添加/删除课程并编辑其属性。我将如何为此构建一个 redux 商店?
我的第一个想法是使状态成为映射对象,如下所示:
interface Course {
id: string;
name: string;
time: string;
notes: string;
}
interface StoreState {
[id: string]: Course;
}
其中状态中的每个条目对应于一个课程实例。然后,当用户添加新课程时,我会在状态中添加一个新条目
const slice = createSlice({
name: 'courses',
initialState: {},
reducers: {
addCourse: (state, action) => {
state[action.payload.id] = {
id: action.payload.id,
name: action.payload.name,
...
...
}
},
updateNotes: (state, action) => {
state[action.payload.id].notes = action.payload.notes
}
...
...
}
})
这并不理想,因为我必须id
在每种情况下都冗余地使用课程减速器来更新正确的课程。我想在商店中为每门课程都有一个状态对象,并像这样编写我的案例缩减器:
updateNotes: (state, action) => {
state.notes = action.payload.notes
}
我不必担心我正在更新哪个课程,因为它们的功能都相同。有没有办法为共享相同 reducer 逻辑的每门课程动态创建状态?