我很想知道这两种改变状态的方式(注解和非注解)有什么区别?第一个导致问题时,调度工作不好。为什么会这样呢?
export const correctiveSlice = createSlice({
name: "corrective",
initialState: initialCorrectiveState,
reducers: {
correctContent: (state, action: PayloadAction<CorrectiveState>) => {
// This code doesn't work
// state = {
// item: {
// id: action.payload.item.id,
// text: action.payload.item.text,
// },
// edit: action.payload.edit,
// };
// This code works
state.item = action.payload.item;
state.edit = action.payload.edit;
},
},
});
我正在做经典的todo-list应用程序,但我使用的是redux-toolkit
/react-redux
库。当我尝试使用第一种方法来改变状态时,它没有改变。
1条答案
按热度按时间8fsztsew1#
如果你用
state = {...}
将state
赋值给一个全新的对象,你 * 没有 * 修改传递的state
。相反,您正在将新的局部变量重新分配给新的值,即改变参考。底层方法只能访问它们传递给reducer方法的state
,该方法保持不变。实际上,这不是Redux
或React
的问题,而是JavaScript
或任何不使用显式指针的语言的基本行为。要修改底层变量,您必须像修改
state.item = action.payload.item
等那样修改它的属性,或者像here那样合并它。但是,只有在使用redux-toolkit
时才允许修改状态!或者,您使用类似
return action.payload
的东西 * 返回 * 新状态,而不是修改传递的state
。在这种情况下,返回的项将替换先前的state
。这是一个Redux
特性。