是否可以使用 Redux Toolkit 从另一个 reducer 函数(在同一切片内)调用 reducer 函数?
Is it possible to call a reducer function from another reducer function (within the same slice) using Redux Toolkit?
我有这个小模块管理片:
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
是未定义的。
有没有办法从另一个内部调用一个减速器?它的语法是什么?
如果没有,假设我想将 addModule
和 setActiveModule
都保留为单独的操作,是否可以通过另一种方式实现此功能?
从 createSlice
返回的 slice
对象包括您作为 slice.caseReducers
传入的每个单独的 case reducer 函数,以帮助处理这种情况。
所以,你可以这样做:
addModule(state, action) {
const { moduleName, renderingData } = action.payload;
if (!state.modules[moduleName]) {
state.modules[moduleName] = renderingData;
}
WorkspacesSlice.caseReducers.setActiveModule(state, action);
},
此外,reducer 函数没有 this
,因为不涉及 class 个实例。它们只是函数。
我有这个小模块管理片:
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
是未定义的。
有没有办法从另一个内部调用一个减速器?它的语法是什么?
如果没有,假设我想将 addModule
和 setActiveModule
都保留为单独的操作,是否可以通过另一种方式实现此功能?
从 createSlice
返回的 slice
对象包括您作为 slice.caseReducers
传入的每个单独的 case reducer 函数,以帮助处理这种情况。
所以,你可以这样做:
addModule(state, action) {
const { moduleName, renderingData } = action.payload;
if (!state.modules[moduleName]) {
state.modules[moduleName] = renderingData;
}
WorkspacesSlice.caseReducers.setActiveModule(state, action);
},
此外,reducer 函数没有 this
,因为不涉及 class 个实例。它们只是函数。