我正在尝试通过称为resetState
的redux动作来重置状态,在该操作中,我将状态分配给了initialState
变量,但这是行不通的。
const initialState = {
someArray: [],
someEvents: {}
}
const stateSlice = createSlice({
name: "someState",
initialState,
reducers: {
...someActions,
resetState: (state, action) => {
// THIS DOES NOT WORK
state = initialState
},
resetState2: (state, action) => {
// THIS WORKS!!!!
return initialState
},
});
当我返回initialState时,状态会正确重置,但不会将其分配给initialState
。
答案 0 :(得分:1)
分配state = anything
是不正确的,无论您是使用Redux Toolkit还是手工编写化简版。所做的全部工作就是将本地state
变量指向另一个引用。
RTK的createSlice
在内部使用Immer。 Immer主要通过跟踪变异到包装的值(例如state.someField = 123
)来工作。 Immer还允许您返回您自己构建的全新状态。
因此,在这种情况下,您想要的是return initialState
返回一个新值并强制Immer替换旧值。
答案 1 :(得分:0)
resetState: (state, action) => {
Object.assign(state, action.payload)
},