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

[react]React18个新特性

时间:2023-03-26 20:16:42 JavaScript

1.自动批处理以往在一个事件中setState,react会将多个set操作合并为一个,例如:sandboxfunctionhandleClick(){console.log("===click===");setCount((c)=>c+1);setFlag((f)=>!f);}////两个set会合并但是在异步操作如:setTimeout或fetch中,set操作不会合并。sandboxfunctionhandleClick(){console.log("===点击===");fetchSomething().then(()=>{//React17及更早版本不批处理这些:setCount((c)=>c+1);//导致重新渲染setFlag((f)=>!f);//导致重新渲染});}所以有些第三方库会手动合并:import{unstable_batchedUpdates}from'react-dom';unstable_batchedUpdates(()=>{setCount(c=>c+1);setFlag(f=>!f);});//两组会合并处理React18会提供自动批处理功能,只要使用ReactDOM.createRoot而不是ReactDOM.render即可。如果某些需求不想使用批处理,可以使用flushSync:import{flushSync}from'react-dom';//注意:react-dom,不是reactfunctionhandleClick(){flushSync(()=>{setCounter(c=>c+1);});//React现在已经更新了DOMflushSync(()=>{setFlag(f=>!f);});//React现在已经更新了DOM}2.React18中Suspense的行为变化React官方将18版本的Suspense称为“ConcurrentSuspense”,将16和17版本的Suspense称为“LegacySuspense”。以如下代码为例:}>区别在于挂起组件的兄弟节点。在LegacySuspense中,兄弟姐妹会立即安装在DOM中并触发生命周期。沙箱处于ConcurrentSuspense中,其兄弟节点Sibling组件并没有立即挂载到DOM上。在ComponentThatSuspends解析之前,它的效果/生命周期也不会触发。沙箱的目的是延迟子树的呈现,直到树中的所有数据都已解析。3、新特性:startTransition属于性能优化的API。以下结论请参考:真实世界示例:为慢速渲染添加startTransition它解决了什么问题?目前我理解为:更智能的防抖拦截,简单易懂官方提供了一个非常具体的例子(例子的具体优点是方便理解startTransition的功能,但是也有缺点,就是是,除了这个我想不到它的用处):你在做可视化的时候可能会遇到。有一个滑块可以调整阈值。下面的滑块是关系图。滑动滑块,改变阈值引起数据变化,数据变化引起关系图变化良好实现:2021-06-22.at.9.42.18.AM.mov一般实现:2021-06-21。在3.43.50。没有任何优化的PM.mov的实现:2021-06-21.at.1.16.51.PM.movHowtosolve包裹在startTransition中的Updates被处理为非紧急更新,如果有更紧急的更新如点击或按键来了会被中断in.如果过渡被用户打断(例如,通过连续键入多个字符),React将抛出未完成的陈旧渲染工作并仅渲染最新更新。包含在startTransition中的更新被认为是非紧急更新,如果发生更紧急的更新(例如单击或按键),将会被中断。如果转换被用户打断(例如,在一行中输入多个字符),React将丢弃未解决的转换。完成旧的渲染工作,只渲染最新的更新。屈服:每5毫秒,React将停止工作以允许浏览器执行其他工作,例如运行承诺或触发事件。屈服:每5毫秒,React将停止工作以允许浏览器执行其他工作,例如运行承诺或触发事件。触发事件。中断和跳过旧结果::如果转换被用户中断(例如,通过连续键入多个字符),React将丢弃未完成的陈旧渲染工作并仅渲染最新更新。旧结果:如果转换被用户打断(例如,在一行中输入多个字符),React将丢弃未完成的陈旧渲染工作,只渲染最新的更新。与setTimeout不同,setTimeout是异步的,而startTransition是同步的。我们可以看到startTransition并没有改变事件的顺序,它还在,但是会“等待”紧急事件完成,然后再执行。gif来自:知乎介绍React18并发“模式”怎么了?【react】新React18的特点