javascript - 反应 setstate 嵌套对象问题
问题描述
我无法解决这个 setState 第二天晚上,我已经绝望了。我有大量嵌套的对象,我正在尝试更新。如果我在 todaysMenu 中有多个元素,并且我正在尝试更新第二个元素的状态,则整个数组会“存储”在 todaysMenu 的第一个元素中。
onChangeAnyValue(values, itemIndex) {
const key = Object.keys(values.x)[0];
const provideDate = values.date;
this.setState(prevState => ({
data: prevState.data.map(day => day.date === provideDate ? {
...day,
todaysMenu: [{
...day.todaysMenu,
[itemIndex]: {
...day.todaysMenu[itemIndex],
dish: {
...day.todaysMenu[itemIndex].dish,
[key]: values.x[key]
}
}
}]
} : day)
}));
}
如果我删除方括号,它只是存储为对象。
感谢您的时间!
解决方案
你会想要改变:
todaysMenu: [{
...day.todaysMenu,
[itemIndex]: {
...day.todaysMenu[itemIndex],
dish: {
...day.todaysMenu[itemIndex].dish,
[key]: values.x[key]
}
}
}]
...至:
todaysMenu: day.todaysMenu.map((item, index) =>
index === itemIndex
? { ...item, dish: { ...item.dish, [key]: values.x[key] } }
: item
)
您目前拥有的是使用一个对象创建一个数组,而不是将数组转换为修改后的数组。
推荐阅读
- python - 获取“AttributeError:'str'对象没有属性'decode'”
- javascript - 使用 FetchContent JS 发出警报
- .htaccess - htaccess中带有条件的禁止规则
- c# - 如何使用 Entity Framework Core 创建连接表?
- javascript - 调用服务器时 ajax 调用中的错误 500,但在 localhost 中有效
- reactjs - React Stripe Elements - 将 iFrame 的宽度设置为自动?网格和模态中不可见的元素
- reactjs - 每次在父组件中满足条件以显示子组件时,如何在子组件中执行函数?
- python-3.x - 如何在 Windows 子系统(Ubuntu 18.04)上运行 python tkinter?
- arrays - 在Apple Swift中将json转换为数组的字符串数组
- julia - Julia 1.2 下无法安装 Genie 框架