如何使用Redux Toolkit(RTK)重置Redux Slice状态

时间:2020-10-23 17:05:55

标签: reactjs redux redux-toolkit

我正在尝试通过称为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

2 个答案:

答案 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)
 },