이 작은 모듈 관리 슬라이스가 있습니다.
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;
내가하려는 것은 중복 코드를 갖지 않도록 setActiveModule
내부에서 호출 하는 addModule
것이지만 this
정의되지 않았기 때문에 오류가 발생 합니다.
한 감속기를 다른 감속기에서 호출하는 방법이 있습니까? 그 구문은 무엇입니까?
그렇지 않은 경우, 내가 모두 유지하려는 가정, 다른 방법으로이 기능을 달성 할 수 addModule
및 setActiveModule
개별 행동으로?
slice
에서 반환 된 객체 createSlice
에는 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);
},
또한 감속기 함수에는 this
포함 된 클래스 인스턴스가 없기 때문에는 없습니다. 그것들은 단지 기능입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다