Javascript 什么';在React中,从异步调用批处理状态更新的最佳方法是什么?
我从中了解到,如果事件基于Javascript 什么';在React中,从异步调用批处理状态更新的最佳方法是什么?,javascript,reactjs,asynchronous,setstate,Javascript,Reactjs,Asynchronous,Setstate,我从中了解到,如果事件基于非React即setTimeout、Promise调用,React不会自动批处理状态更新。(简而言之,任何来自Web API的事件。) 这与基于反应的事件不同,例如onClick事件(etc)中的事件,这些事件由反应限制渲染批处理。这在中得到了很好的说明,这从本质上证明,虽然这只会触发一个渲染: 函数handleClickWithoutPromise(){ 刚毛('aa'); 挫折(“bb”); } 这将触发两个: 函数handleClickWithPromise()
非React
即setTimeout、Promise调用,React不会自动批处理状态更新。(简而言之,任何来自Web API的事件。)
这与基于反应的事件不同,例如onClick事件(etc)中的事件,这些事件由反应限制渲染批处理。这在中得到了很好的说明,这从本质上证明,虽然这只会触发一个渲染:
函数handleClickWithoutPromise(){
刚毛('aa');
挫折(“bb”);
}
这将触发两个:
函数handleClickWithPromise(){
Promise.resolve()然后(()=>{
刚毛('aa');
挫折(“bb”);
});
}
对我来说,这是有问题的,因为在第一次页面加载时,我向后端发送了一个请求,并接收用于更新许多离散状态对象的各种数据。这会触发十几次重新渲染,这显然不是最优的
在不同的职位上提供了一些选择,但请提供一些专家指导,说明哪些是最佳做法:
- Redux(我还没有使用这个库,我担心要彻底检查我的状态处理)。这似乎也是一个常见的问题,如果React有自己的本地方式批处理异步状态更新的话,我会认为这是一个常见的问题
- userReducer并将我的所有状态绑定到一个。然后,我可以用一次状态更新来更新所有内容。考虑到我的不同状态在直觉上是如何保持离散的,这是没有意义的
- 按照中的建议,使用
ReactDOM.unstable_batchedUpdate(()=>{…})
ReactDOM.unstable_batchedUpdates(()=>{…})
工作的简单示例。(您必须向下滚动到以下部分:“如何强制批处理?”)
作者还补充说:
虽然这个功能被认为是“不稳定的”,但显然
打算在以下版本中解决这一问题
未来版本中的“”
(可能是React 17及更高版本),默认情况下React将批处理所有更新
丹·阿布拉莫夫说,所以你不必考虑这个问题
React v17在这里,测试起来应该很简单,对吗?快速扫描,除了在(实验性)并发模式下进行改造外,我没有看到任何提到的内容: