javascript - 如何更新 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 }
}
解决方案
浅层复制您正在更新的对象的所有状态。您可以将id
用作动态键。
case UPDATE_CAPACITY:
return {
...state, // <-- copy current state
[id]: {
...state[id], // <-- copy current element
availableCapacity: state[id].availableCapacity + 1 // <-- increment capacity
}
}
推荐阅读
- r - 如何使用 ggparliament 获得显示每个政党所需颜色的图形?
- powershell - Powershell Construct Date ForEach 多次返回第一个文件的日期
- php - Laravel 应用程序不保存数据且不显示任何错误
- python-3.x - self 指的是超类而不是子类
- r - 如何删除出现不同 NA 的观察行
- python - 遍历文件夹中的所有 txt 文件时出现 Unicode 解码错误
- javascript - Vue watch 意外调用了两次
- android - 如何使用 getResourceAsStream 修复未找到的资源
- excel - 如何强制excel获得焦点并刷新UI
- angular - 如何在Angular中注册触摸移动事件?