Jim*_*ode 5 javascript asynchronous setstate reactjs
我从这篇文章中了解到,在基于事件(即 setTimeout、Promise 调用)的情况下,React 不会自动批量状态更新non-react
。(简言之,来自 Web API 的任何事件。)
这与react-based
事件不同,例如来自 onClick 事件(等)的事件,这些事件通过反应进行批处理以限制渲染。这个答案很好地说明了这一点,它本质上证明了虽然这只触发一个渲染:
function handleClickWithoutPromise() {
setA('aa');
setB('bb');
}
Run Code Online (Sandbox Code Playgroud)
这将触发两个:
function handleClickWithPromise() {
Promise.resolve().then(() => {
setA('aa');
setB('bb');
});
}
Run Code Online (Sandbox Code Playgroud)
对我来说这是有问题的,因为在我的第一个页面加载时,我向后端发送了一个请求并接收用于更新大量离散状态对象的各种数据。这会触发十几次重新渲染,这显然不是最佳的。
不同的帖子提供了一些选项,但希望获得一些关于最佳实践的专家指导:
ReactDOM.unstable_batchedUpdates(() => { ... })
按照本答案中的建议使用因此,以防万一没有更好的答案,我在 Medium 上发现了这篇文章,它展示了一个非常好的、简单的工作示例ReactDOM.unstable_batchedUpdates(() => { ... })
。(您必须向下滚动到“如何强制批处理?”部分)。
作者还补充说:
\n\n\n尽管这个函数应该是 \xe2\x80\x9cunstable\xe2\x80\x9d,但 React 显然\n打算在以下版本中解决这个问题。
\n
\n\n\xe2\x80\x9c在未来的版本\n(可能是 React 17 及更高版本),React 将默认批处理所有更新\n所以你\xe2\x80\x99t 不必考虑这个\xe2\x80\x9d ,根据 Dan 的说法阿布拉莫夫。
\n
归档时间: |
|
查看次数: |
3314 次 |
最近记录: |