是否可以在切片缩减器中重新分配整个状态(使用Redux ToolKit)?

hfsqlsce  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(143)

我正在使用Redux Toolkit的createSlice()。并试图创建一个reducer,它将来自外部源的数据填充到redux状态中。我试图通过在action有效负载中传递一个对象来更新整个状态:

.
    reducers: {
        populateData: (state, action) => {
            state = action.payload
        }
.

但是只有我为每个对象关键点创建一个缩减器,它才能工作。2有没有一种方法可以同时完成这一切呢?

vohkndzv

vohkndzv1#

这是一个常见的误解,实际上我昨天刚刚写了一个新的"Writing Reducers with Immer" docs page来回答这个问题。
一个常见的错误是尝试赋值state = someValue directly。这是行不通的!这只是将本地状态变量指向一个不同的引用。这既不是改变内存中现有的状态对象/数组,也不是返回一个全新的值,所以Immer没有做任何实际的更改。
相反,您希望:return action.payload,它将完全替换现有状态。

4zcjmb1e

4zcjmb1e2#

我碰到了这个问题

这不起作用

reducers: {
      setSession: (state, action: PayloadAction<SessionState>) =>
         state = action.payload, 
   },

这确实有效

reducers: {
      setSession: (state, action: PayloadAction<SessionState>) =>
         action.payload, 
   },

相关问题