javascript - 状态内部的反应数组不会改变
问题描述
scriptWriter = (data:ItemType) => {
let id = data.id
console.log(this.state.items.map(el => el.id === id ? data : el)) //#1
this.setState({
items: this.state.items.map(el => el.id === id ? data : el)
})
console.log(this.state.items) //#2
}
这是我的代码。我正在尝试更改状态数组中的元素。但是#1
代码的结果和#2
' 的结果是不同的。我想改变this.state.item
结果#1
。有什么解决办法吗?
解决方案
这是因为 setState 本质上是异步的,使用回调来记录状态值,状态值将在状态更新后调用:
this.setState({
items: this.state.items.map(el => el.id === id ? data : el)
},
() => console.log(this.state.items)
);
推荐阅读
- amazon-web-services - 如何在不使用完整 SDK jar 的情况下单独/显式使用 AWS SDK 服务的模型
- c++ - FLTK 1.4 小部件位置 wrt X11 根窗口?
- dart - 在 Dart 中调用可空回调的简写?
- python - django模型类方法求今日平均和最新记录
- getstream-io - Getstream - 在时间线提要中固定活动以在提要顶部列出固定的帖子
- multithreading - Spring 集成中的拆分如何适用于 Web 容器?
- macos - SwiftUI 自定义选择器/组合框
- snowflake-cloud-data-platform - 成本与查询次数雪花
- javascript - NuxtJS:在页面组件中使用 vanilla JS 库 (Pickr)
- r - 如何根据R中多个变量的条件将新变量添加到现有数据框中?