当前位置: 首页 > Web前端 > HTML

React18自动批处理

时间:2023-03-28 12:40:40 HTML

React18发布后,增加了很多性能优化特性,其中之一就是减少页面重渲染,值得关注!自动批处理使用React中的setState来改变调度组件的状态。在组件中调用setState时,不会立即触发重新渲染。React执行所有事件处理程序,然后触发一次重新渲染,合并所有更新。比如点击+1的例子,如果该方法连续触发了3次setState,React最终会将update函数放到一个队列中,然后合并队列触发setState的重新渲染,也就是批处理的意思。优点:既可以减少程序数据状态存在中间值带来的不稳定性,又可以提高渲染性能。在React18之前,如果setState是在回调函数的异步调用(setTimeout,then...)中执行的,由于context的丢失(也就是所谓的同步),merge过程无法完成,所以每个setState调用都会在重新渲染后被触发。例如:setTimeout(()=>{setA('2');//渲染时间+1setA('3');//渲染时间+1},0)在这种情况下,在React18中,它将是默认完成合并处理!例如:setTimeout(()=>{setB('2');setB('3');//设置两次,只渲染一次},0)但是,如果真的需要渲染两次,react对应的方法也为你提供了~import{flushSync}from'react-dom';...setTimeout(()=>{flushSync(()=>{setB('2');})flushSync(()=>{setB('3');})},0)...*注意!!这里注意,这样写的话,flushSync是不会生效的!!!!*setTimeout(()=>{flushSync(()=>{setB('2');//渲染时间+1setB('3');//渲染时间+1})},0)