如何使用 Redux Toolkit (RTK) 重置 redux 切片状态

Ado*_*lfo 7 reactjs redux redux-toolkit

我试图通过名为 的 redux 操作重置状态resetState,其中我将状态分配给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
    },
});
Run Code Online (Sandbox Code Playgroud)

当我返回初始状态时,状态会正确重置,但将其分配给initialState不会。

mar*_*son 16

state = anything无论您是使用 Redux Toolkit 还是手动编写化简器,分配都是不正确的。所做的只是将局部state变量指向不同的引用。

RTK的内部createSlice使用Immer。Immer 主要通过跟踪包装值的突变来工作,例如state.someField = 123. Immer 还允许您返回您自己构建的全新状态。

因此,在这种情况下,您想要的是return initialState返回一个新值并强制 Immer 替换旧值。