是否可以使用Redux Toolkit从另一个reducer函数(在同一切片内)调用reducer功能



我有一个小模块管理切片:

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是未定义的
是否有一种方法可以从另一个减速器中调用某个减速器?它的语法是什么
如果没有,假设我想将addModulesetActiveModule作为单独的操作,是否可以用另一种方式实现此功能?

createSlice返回的slice对象包括您作为slice.caseReducers传入的每个大小写缩减器函数,以帮助处理此类情况。

所以,你可以做:

addModule(state, action) {
const { moduleName, renderingData } = action.payload; 
if (!state.modules[moduleName]) {
state.modules[moduleName] = renderingData;
}
WorkspacesSlice.caseReducers.setActiveModule(state, action);
},

此外,reducer函数没有this,因为不涉及类实例。它们只是函数。

Redux Toolkit文档有一个例子,你可以阅读如何做到:

const slice = createSlice({
name: 'test',
initialState: 0,
reducers: {
increment: (state, action: PayloadAction<number>) => state + action.payload,
},
})
// also available:
slice.caseReducers.increment(0, { type: 'increment', payload: 5 })

相关内容

  • 没有找到相关文章

最新更新