我有这样一个小模块管理片:
const WorkspaceSlice = createSlice({
name: "workspace",
initialState: {
activeModule: null,
modules:
{
["someModule"]: { ...moduleRenderingData },
},
},
reducers: {
setActiveModule(state, action)
{
state.activeModule = action.payload;
},
addModule(state, action)
{
const { moduleName, renderingData } = action.payload;
if (!state.modules[moduleName])
{
state.modules[moduleName] = renderingData;
}
// state.activeModule = moduleName; <- basically the same as 'setActiveModule'
this.setActiveModule(state, action.payload.module); // <- 'this' is undefined
},
},
});
export default WorkspaceSlice;
我尝试做的是从addModule
中调用setActiveModule
,这样就不会有重复的代码,但是我得到了一个错误,因为this
未定义。
有没有办法从一个reducer内部调用另一个reducer?语法是什么?
如果没有,假设我希望将addModule
和setActiveModule
作为单独的操作,是否可以用另一种方式实现此功能?
2条答案
按热度按时间ldfqzlk81#
从
createSlice
返回的slice
对象包括作为slice.caseReducers
传入的每个大小写还原器函数,以帮助处理此类情况。因此,您可以:
另外,reducer函数没有
this
,因为没有涉及类示例,它们只是函数。mzsu5hc02#
Redux工具包文档中有一个示例,您可以阅读如何操作: