Javascript 如何为相同数据类型的多个实例重用Redux reducer逻辑?
假设我有一份跟踪大学课程的申请。每门课程都有一些属性,如Javascript 如何为相同数据类型的多个实例重用Redux reducer逻辑?,javascript,typescript,redux,redux-toolkit,Javascript,Typescript,Redux,Redux Toolkit,假设我有一份跟踪大学课程的申请。每门课程都有一些属性,如名称时间注释id。在应用程序中,用户可以添加/删除课程并编辑其属性。我将如何为此构建redux商店 我的第一个想法是将状态设置为映射对象,如下所示: 接口课程{ id:字符串; 名称:字符串; 时间:字符串; 注:字符串; } 接口存储状态{ [id:string]:进程; } 其中,状态中的每个条目对应一个课程实例。然后,当用户添加新课程时,我会向状态添加一个新条目 const slice=createSlice({ 名称:'课程',
名称
时间
注释
id
。在应用程序中,用户可以添加/删除课程并编辑其属性。我将如何为此构建redux商店
我的第一个想法是将状态设置为映射对象,如下所示:
接口课程{
id:字符串;
名称:字符串;
时间:字符串;
注:字符串;
}
接口存储状态{
[id:string]:进程;
}
其中,状态中的每个条目对应一个课程实例。然后,当用户添加新课程时,我会向状态添加一个新条目
const slice=createSlice({
名称:'课程',
初始状态:{},
减速器:{
addCourse:(状态、动作)=>{
状态[action.payload.id]={
id:action.payload.id,
名称:action.payload.name,
...
...
}
},
updateNotes:(状态、操作)=>{
状态[action.payload.id].notes=action.payload.notes
}
...
...
}
})
这并不理想,因为在任何情况下,我都必须冗余地使用课程id
,以更新正确的课程。我希望在每个课程的存储中都有一个state对象,并编写我的案例简化程序,如下所示:
updateNotes:(状态、操作)=>{
state.notes=action.payload.notes
}
我不必担心我在更新哪门课程,因为它们的功能都是一样的。是否有一种方法可以动态地为共享同一缩减器逻辑的每门课程创建状态?您需要实现redux的combineReducers()的动态版本
似乎有一个包可以做到这一点:看看这个,我认为您所关心的是最终的数据结构,
ID
是存储数据中的一个键和一个属性,这打破了Redux中的数据存储应该是最小数据集而不重复的想法
解决方法是仅将ID存储为密钥,并在从存储中取出密钥时,使用名为Reselect
的库将密钥合并回数据中