javascript - 反应中 prevstate 的对象
问题描述
我有对象处于类状态。
man: {
name: "John",
wife: [{"children": 2}, {"children": 3}]
}
this.setState(prevState => ({man: prevState.wife[0].children + 1}));
我想加减第一任妻子的孩子数量。我使用 prevState 但它不起作用。为什么以及如何更改此属性?
解决方案
你的旧状态:
{
man: {
name: "John",
wife: [{"children": 2}, {"children": 3}]
}
}
你正在返回新的状态:
{
man: 3
}
如果您需要保留相同的状态结构,解决方案可以是:
this.setState(prevState => ({
man: {
...prevState.man,
wife: prevState.man.wife.map((value, i) => (i === 0 ? {
...value,
children: value.children + 1
} : value)),
}
}));
但是这种修改通常使用lodash/fp update或Ramda over更容易:
this.setState(prevState => R.over(
R.lensPath([`man`, `wife`, 0, `children`]),
(v) => v + 1,
prevState,
));
推荐阅读
- javascript - 如何解决:vs 代码扩展开发中的 svelte 中的“未捕获的 ReferenceError:require$$0 未定义”
- kotlin - 如何防止 Jetpack Compose 中不必要的重组
- beautifulsoup - BeautifulSoup:在指定文本之后获取页面上的元素?
- docker - K8s 部署无法从私有注册表中提取 docker 映像。错误:ImagePullBackOff
- selenium-chromedriver - Python 中的 Selenium Chrome 驱动程序找不到 xpath 或 id
- mongodb - 更新 mongoDB 集合中的类型时出错 - InterruptedDueToReplStateChange
- pytorch - 使用 Pytorch 的梯度矩阵 (NxWxEPOCH)
- python - plotly express line3D的轴范围误差
- python - 用考虑 groupby 前后的平均值填充包含 NaN 的单元格
- django - django djoser 发送请求时缺少相关字段