收到此错误"Invariant failed: A state mutation was detected inside a dispatch, in the path: todoReducer.1.



我尝试了所有类似spread运算符的方法,但都不起作用。

这是我的减速器

//state is an array of objects.
const initialState = [
{taskName: "kkkkk", isEdit: false},
]
export const todoReducer = (state=initialState, action) =>{
switch(action.type){
case 'add'  :   

const temp=
{
taskName: action.payload.taskName,
isEdit: action.payload.isEdit
}
state.push(temp);
return {state}
default: return state
}
}

错误消息表明您正在使用Redux Toolkit,这非常好。问题是,您没有使用createSlicecreateReducer,除此之外,在Redux中,您永远不允许使用=向旧状态属性分配内容,也不允许调用类似.push的内容,因为它会修改现有状态。

改为使用createSlice

const initialState = [
{taskName: "kkkkk", isEdit: false},
]
const slice = createSlice({
name: 'todos',
reducers: {
add(state, action) {
state.push(action.payload)
}
}
})
export const todoReducer = slice.reducer;
// this exports the auto-generated `add` action creator.
export const { add } = slice.actions;

由于您目前正在学习的教程似乎包含了现代和完全过时的实践,我强烈建议您阅读官方的Redux教程,它展示了现代概念。

最新更新