【发布时间】:2021-05-02 22:37:06
【问题描述】:
我有一个更大的减速器,我想向它添加另一个切片,这本身会相当复杂。例如,这是一个已经很复杂的大型 reducer:
const initialState = {
bigchunk1: { ...someObject },
bigchunk2: true,
bigchunk3: [...somevalues],
bigchunk4: 'etc'
}
function mainReducer(state = initialState, action){
switch(action.type){
case Actions.CASE1:
return {
...state,
bigchunk1: {
...state.bigchunk1;
somevalue: action.payload.this_is_already_enough_nesting
}
}
case Actions.CASE2:
return {
...state,
bigchunk4: 'this goes on for awhile'
}
// lots more cases
default:
return state
}
}
我想为 state 添加一个新切片,所以整个 initialState 最终会在 store 中看起来像这样:
const initialState = {
bigchunk1: { ...someObject },
bigchunk2: true,
bigchunk3: [...somevalues],
bigchunk4: 'etc',
newslice: { ...someComplicatedThing }
}
但我不想将所有新案例都写入我原来的 reducer(以及非常混乱的嵌套和扩展运算符级别),我想编写一个新的 reducer 来处理与 newslice 相关的案例:
const initialState = { ...someComplicatedThing }
function newSliceReducer(state = initialState, action){
switch(action.type}{
// cases here
}
}
我知道combineReducers,但我很难考虑如何在这种情况下应用它。 combineReducers 可以使用这两个 reducer 并将它们作为兄弟姐妹放置,但是我怎样才能将它们组合起来以使 newSliceReducer 及其关联状态成为 mainReducer 的子 newslice 下的子节点?我觉得这应该很简单,但它现在正在逃避我。我一直在阅读 redux 文档,但我没有清楚地看到答案。我不想使用redux-toolkit 或任何外部库。
【问题讨论】:
-
您能否澄清一下为什么使用
combineReducers并将mainReducer作为newslice的兄弟姐妹对您不起作用?他们是否会有交叉依赖关系? -
我正在尝试向一个已经很大的应用程序添加一个状态片段,但我无法重写整个应用程序。我不希望
newslice成为mainReducer的兄弟,我希望它成为mainReducer的孩子。
标签: javascript reactjs redux