javascript - 更改对象中值的状态,对象数组中的索引处,对象内的状态?
问题描述
我正在使用 React 并尝试使用 setState 挂钩来更新一个非常嵌套的对象中的值,正如您从标题中所理解的那样
我设法让它工作了一些,但是我没有得到我以前拥有的原始对象数组,而是得到一个索引对象作为我的返回值。
所以我正在使用的对象看起来像这样:
{
category: ""
level: ""
name: ""
rarity: ""
requirements: [ {name: "", customValue: 0 <--- that I wish to update }, {name: "", customValue: 0 }]
}
当我尝试更新此值的状态时,我设法将其归结为这一点。该属性的索引是已知的。
setItemUpdated((prev) => ({
...prev,
requirements: { ...prev.requirements, [idx]: { ...prev.requirements[idx], customValue: val } },
}));
这在某种程度上有效。但我得到的不是 [ {}, {} ],而是 [ 1:{} 2:{} ]。我明白我为什么会得到这个,因为我将第一个要求设置为一个对象,但是,当我试图用一个数组包装内部时,我从来没有得到任何编译。我真的不知道它的语法是怎样的。
我试图在 SO 上搜索一个类似的线程,这无疑是存在的,但找不到任何东西。我希望你能在这里帮助我!
先感谢您!
解决方案
正如您已经提到的,您正在尝试在对象内传播数组,结果用数组的索引/值对填充对象。
我会做类似以下的事情(以不可变的方式):
setItemUpdated(prev => ({
...prev,
requirements: prev.requirements.map((prevRequirement, index) => index === idx
? {...prev.requirements[idx], customValue: val}
: prevRequirement
),
}));
它本质上映射到prev.requirements
并且如果它找到已知索引,它会替换/修改该对象,否则它返回prevRequirement
from 数组
推荐阅读
- r - R:标记 n-gram 但不去除标点符号
- python - 带有网格的 Tkinter 滚动条:滚动过去的帧和滚动条灰色
- swift - nw_socket_get_input_frames [C4:1] recvmsg(fd 35, 9216 bytes) [61: Connection denied]
- python - 在 Pandas df 中捕获/过滤文本,其中每一行都有一个唯一的起点
- java - 当 AtomicInteger 比同步更快时
- visual-studio-code - VSCode Intellisense 完成 - 汇编语言
- javascript - JavaScript - 逐字阅读泰米尔语单词
- html - 如何在容器 div 内的 div 中居中多个图像(我尝试了几种方法,包括:text-align:center 和 justify-content)
- mongodb - 获取最后一个文档并过滤嵌套数组
- excel - 使用VBA在工作表中获取所有按顺序排序的工作簿范围名称?