【发布时间】:2020-01-24 20:25:56
【问题描述】:
这是一个小代码sn-p:
async componentDidMount() {
...
this.state.postList.forEach(element => {
this.fetchItem(element);
});
}
async fetchItem(query) {
...
this.setState( previousState => {
const list = [...previousState.data, data];
return { data: list };
});
}
我很想知道在forEach 循环的每次迭代中使用setState 是否是个坏主意。我怀疑它会影响性能,但我想确定一下,因为这似乎是解决此问题的最简单方法。
【问题讨论】:
-
你的
fetchItem()函数是async但对它的调用不包括await -
@Pointy 这就是异步的价值!您不必等待!在我看来他想同时提出请求。
-
当然可以,但效果明显不同。假设所有呼叫在或多或少相同的时间内返回,通过不等待代码正在设置一种情况,即一系列响应都在短时间内调用
setState;我认为这是问题的核心。 -
如果你在做异步的东西,那么最简单的可能是
Promise.all(array.map(asyncFunction)).then(result=>this.setState... -
对
setState的调用是批处理的,因此在所有请求同时或几乎同时快速返回的最坏情况下,我认为您的所有调用都将被批处理为一个大更新。我也同意@HMR 关于使用Promise.all然后对最终结果执行 setState 的观点,但我认为这对于一个小列表来说并不重要
标签: javascript reactjs state