首页 > 解决方案 > 如何更新 id 的反应 redux 状态对象 - 键值对

问题描述

我在我的 redux 状态中有一个变量,它似乎是一个 key 作为 id 和 value 作为内容的对象在此处输入图像描述,正如你所看到的,这个状态变量,让我们称之为它capacity,不是数组或列表,而是一个普通对象,我想要通过 id将 item 属性之一增加为availableCapacity我的操作有效负载中的值,所以这就是我可以做的

const updatedCapacity = {
   ...state.capacity[id],
        availableCapacity: state[id].availableCapacity + 1
   };

updatedCapacity会看起来像

{
  active: true
  avaialbleCapacity: 31
  capacity: "2febf..."
  totalCapacityAvailable: 30
}

但是我怎么能通过 id 找到我的状态中的元素,然后用我修改的替换它updatedCapacity呢?我在下面尝试过,但相反,它在第一个示例中在我的 state.capacity 中添加了一个新条目,在第二个示例中它添加了一个键值“id”的新条目,而不是我的“2febfxxxx”的确切 id...

case UPDATE_CAPACITY:
  return {
     ...state.capacity,
     updatedCapacity
  }
or
case UPDATE_CAPACITY:
  return {
     ...state.capacity,
     id: { updatedCapacity }
  }

标签: javascriptreactjsreduxreact-redux

解决方案


浅层复制您正在更新的对象的所有状态。您可以将id用作动态键。

case UPDATE_CAPACITY:
  return {
    ...state, // <-- copy current state
    [id]: {
      ...state[id], // <-- copy current element
      availableCapacity: state[id].availableCapacity + 1 // <-- increment capacity
    }
  }

推荐阅读