当前,我所有的化简只需要状态值中的数据,所以我的'rootReducer'看起来像这样
export const appReducer = combineReducers({ foo: fooReducerFunction, bar: barReducerFunction})
这很好,但是现在我有一个需要状态的其他部分的减速器,而且我知道可以这样完成
export function App(state: AppState, action: AppActions): AppState {
return {
foo: fooReducerFunction(state.foo, action),
bar: fooReducerFunction(state.bar, action),
baz: bazReducerFunction({foo: state.foo, bar: state.bar}, action)
}
}
但是当我只有一部分商店需要商店的其他部分时,我不想像foo
和bar
那样显式地写出所有其他化简器。有什么方法可以将自定义的reducer和combineReducers
组合成这样的东西?
const appReducer = combineReducers({ foo: fooReducerFunction, bar: barReducerFunction})
export function App(state: AppState, action: AppActions): AppState {
return {
...appReducer,
baz: bazReducerFunction({foo: state.foo, bar: state.bar}, action)
}
}
答案 0 :(得分:0)
有可能以这种方式组合化简器,但是对您的问题更简单的解决方案是在操作中获取redux存储的快照并将所需的状态片传递给您减速器在派遣时。例如,如果您使用的是redux-thunk
,则以下模式应适用:
export const actionFoo = (data) => {
return (dispatch, getState) => {
// access slice of state first
const { otherStateSlice } = getState()
dispatch({ type: UPDATE_DATA, otherStateSlice, data })
}
}