所以我向前跑并规范化Reducer中的所有实体,这意味着每个reducer都有一个单独的entities
对象。我现在意识到一个 reducer在其中包含所有实体更有意义,然后只将ID(例如currentUser或其他东西)存储在单独的reducer中。
这种方法对于从API响应中合并实体非常有意义,但我无法弄清楚我是如何更改任何实体的。
例如,我会在哪里进行这样的操作?
case SUBSCRIBER_TOGGLED: {
let projectSubscriberIDs = cloneDeep(action.payload.project.subscriberIDs);
let indexIfExists = projectSubscriberIDs.indexOf(action.payload.user.id);
if(indexIfExists != -1){
projectSubscriberIDs.splice(indexIfExists, 1);
}else{
projectSubscriberIDs.push(action.payload.user.id);
}
return {
...state,
entities: {
...state.entities,
projects: {
...state.entities.projects,
[action.payload.project.id]: {
...action.payload.project,
subscriberIDs: projectSubscriberIDs
}
}
}
}
}
entities
减速机中完成所有这些操作感觉不对,因为它会变得非常混乱有人有任何见解吗?
答案 0 :(得分:1)
一些想法:
redux-thunk
允许您编写可以访问getState()
的函数。 immer
immutable update library以简化更新嵌套状态。