我收到第二个构建器的错误,它显示:
Uncaught TypeError: typeOrActionCreator is undefined.
我不知道该构建器出了什么问题。当我删除该构建器时,它会出现有关下一个构建器的错误。 (请注意,我从最后一个构建器中调度了 thunkFunction)
export const updateSelectedOrNewMovementData = ("myMovements/updateSelectedOrNewMovementData", async(allData) => {
const {data, type, motion_id} = allData
try{
const {receivedData} = await patchRequest(`/coach/motion/${motion_id}`, data)
return type
}
catch (err) {
console.error("err", err.response.data.message);
}
})
...here there are codes for my slice.
extraReducers(builder) {
builder
.addCase(handleGetMyMovements.fulfilled, (state, action) => {
const data = action.payload;
if (data?.length > 0) {
state.myMovements = [...state.myMovements, ...data];
state.myMovementsTemp = [...state.myMovements, ...data];
}
if (data?.length >= 20) {
state.status.isNotMoreData = true;
} else {
state.status.isNotMoreData = false;
}
state.status.myMovementsLoading = false;
})
.addCase(handleGetMyMovements.pending, (state, action) => {
state.status.myMovementsLoading = true;
});
builder
.addCase(updateSelectedOrNewMovementData.fulfilled, (state, action) => {
if (action?.payload === "formData") {
state.status.selectedOrNewMovementLoading = "sentData"
setTimeout(() => {
state.status.selectedOrNewMovementLoading = false
window.history.back();
}, 3000);
}
})
.addCase(updateSelectedOrNewMovementData.pending, (state, action) => {
if (action?.payload === "formData") {
state.status.selectedOrNewMovementLoading = true
}
})
.addCase(updateSelectedOrNewMovementData.rejected, (state, action) => {
state.status.selectedOrNewMovementLoading = "error"
});
builder
.addCase(createNewMovement.fulfilled, (state, action) => {
const payload = action?.payload
const dispatch = payload?.dispatch
state.status.selectedOrNewMovementLoading = false
if (payload?.data?.is_successful) {
state.motionId = payload?.data?.motion_id
dispatch(updateSelectedOrNewMovement({
data: payload?.myForm,
type: "formData",
motion_id: payload?.data?.motion_id
}))
dispatch(updateSelectedOrNewMovement({
data: payload?.textFormBody,
type: "rawData",
motion_id: payload?.data?.motion_id
}))
}
})
.addCase(createNewMovement.pending, (state, action) => {
state.status.selectedOrNewMovementLoading = true
})
.addCase(createNewMovement.rejected, (state, action) => {
state.status.selectedOrNewMovementLoading = "error"
})
},
在 Redux 中,永远不允许从减速器内部调度。对于异步逻辑也是如此,例如执行
setTimeout
。
Reducer 逻辑必须是纯同步函数,没有副作用。
您可能想要在 thunk 中或使用侦听器中间件执行当前正在执行的逻辑。