如何在reduxjs中使用createSlice更新state中的嵌套json对象?

laximzn5  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(115)

我使用了一种不安全的方法来使用createSlice更新状态。我想在分派过程中发送的一个json对象中动态地更新给定键值对的状态。现在我正在循环[key,value]对并逐个更新它们。这不是很好。有没有一种方法可以基于{... state.user,action.payload }这样的浅副本来设置状态。对我来说,直接复制状态是不起作用的。看起来我可能遗漏了一些关于如何使用它的东西,但是我在文档中找不到任何关于它的东西。任何帮助都将不胜感激。

import { createSlice } from '@reduxjs/toolkit'

export const userSlice = createSlice({
  name: 'user',
  initialState: {
    user: {},
  },
  reducers: {
    set_user: (state, action) => {
      // Redux Toolkit allows us to write mutating logic in reducers. It
      // doesn't actually mutate the state because it uses the Immer library,
      // which detects changes to a draft state and produces a brand new
      // immutable state based off those changes
      state.user = action.payload
    },
    update_user: (state, action) => {
      console.log(action.payload)
      //eg {x: 'y', z: '1'}
      for (const [key, value] of Object.entries(action.payload)) {
        console.log(key)
        console.log(value)
        state.user[key] = value
      }
    },
})
qxsslcnc

qxsslcnc1#

有一个内置的帮助器javascript方法Object.assign(),其作用与您的代码相同
assign()静态方法将所有可枚举的自身属性从一个或多个源对象复制到目标对象,并返回修改后的目标对象。

update_user: (state, action) => {
   state.user = Object.assign(state.user, action.payload)
}

但是,您可以将整个更新后的用户返回为action.payload,因此不需要执行此操作

相关问题