React 18下的Auto Batching特性测试

简介

React中的batching操作会将多次状态变更进行合并更新。默认的batching只会作用于在React的event handler中。
而React 18中新的Auto Batching特性会将setTimeout, setInterval, Promise等无法自动batching的进行自动批量更新处理(之前可使用unstable_batchedUpdates 进行手动批量更新)
在此会使用实际事例来进行具体演示说明。
 
官方的特性说明
 

Demo

组件中含有s1和s2两个变量,初始值为0。 点击stop interval会停止自增循环,点击manually update会手动将s1 s2两个变量自增1。 render时会在控制台中打印This App is rerendered! 字样,通过观察打印次数来得出rerender的次数(即batch更新是否有效)。
 
以下的两个codesandbox会分别使用[email protected][email protected]进行演示。

React18(auto-batching)

  • setInterval内的2次setState仅会使当前组件rerender1次
 

React16.8(no auto-batching)

  • setInterval内的2次setState会使当前组件rerender2次
  • 另外,codesandbox内含有[email protected]提供的unstable_batchedUpdates方法,可以使状态变更批量更新