reactjs - 如何异步更新状态内的项目
问题描述
我有以下状态:
this.state = {
data: [
{id: 1212, cat:"cat1"},
{id: 13123, cat:"cat1"},
{id: 1212, cat:"cat2"},
{id: 13123, cat:"cat2"},
{id: 1212, cat:"cat3"},
{id: 13123, cat:"cat3"},
{id: 1212, cat:"cat4"},
{id: 13123, cat:"cat4"},
..
]
}
我有 ids 和 cat (类别)。所有数据都是动态的。我不知道每次都会获取哪些 id 和 cat
in the componentDidMount(){
// I fetch the latest data and sort it based on cat and `setState` for `this.state.data`
}
in the componentDidUpdate(){
// I will get the all the unique cats from this.state.data and store it in an array.
// I will loop over the unique cats and fetch some more data related to each cat. But this will be aynchronous
// Now how to add the fetched data for each cat at all the places wherever that cat is there in the this.state.data
// i.e
i am expecting this.state.data to be
{
data: [
{id: 1212, cat:"cat1", extra:'....'},
{id: 13123, cat:"cat1", extra:'....'},
{id: 1212, cat:"cat2", extra:'....'},
{id: 13123, cat:"cat2", extra:'....'},
{id: 1212, cat:"cat3", extra:'....'},
{id: 13123, cat:"cat3", extra:'....'},
{id: 1212, cat:"cat4", extra:'....'},
{id: 13123, cat:"cat4", extra:'....'},
..
]
}
}
如何根据特定猫异步向数据添加新属性。
解决方案
您不能更新 内部的状态componentDidUpdate
,因为它会立即导致无限循环。你更新状态,组件重新渲染,componentDidUpdate
调用,你更新状态等等。
相反,您需要将所有这些信息放入您的componentDidMount
钩子中。setState
这里可以多次调用。
进行初始提取,并将数据设置为您的状态。然后,在同一方法中,进行后续数据提取。当您收到新数据时,更新本地方法变量data
并setState
使用新版本的data
.
推荐阅读
- sql - 从sql中的第二个表中的第一个表中删除的身份记录
- javascript - 我在使用 Vuetify UI 组件使每个布局页面的屏幕混乱时遇到问题
- celery - 有没有办法动态修改 Airflow 中 celery worker 的并发性?
- javascript - 使用 .catch 代替 try/catch 块
- angular - 如何在本地主机上使用 ASP .NET Core 2.2 设置 Angular8 CORS?
- java - Spring Web/Security 更新到 5.1.1 打破 json 响应。json 响应现在已经转义了双引号
- python - 是否可以从随机 Gist 获取 URL?
- xml - XSLT 缺少的元素并未全部添加
- android - Android 应用安全问题:Android API 级别 24 及以上的凭据存储用户名密码未加密
- java - 在创建 keyzstore 实例时出现错误,因为找不到 pkcs11