CleanApp:高效系统清理与优化软件的全面解析
在数字时代,我们的设备日益成为生活的核心,但随之而来的是数据堆积、缓存冗余和系统缓慢等问题。为了应对这些挑战,
mac os系统怎么卸载vuze程序?
这样最好用CleanApp卸载,有下载。VUZE如果自己卸载肯定卸载不干净。
React渲染顺序及useEffect执行顺序探究(含并发模式)
前言
在不借助任何演示的情况下,你能清楚地说出React组件的渲染顺序以及useEffect的执行顺序吗?你知道React18『并发模式』下执行情况是不同的吗?下面就让我们一起来看一看吧~
React16
先来看目前大部分人还在用的16或者17版本,也就是默认的渲染情
我们来写一个Demo,这个Demo包含一个父组件(App),两个子组件(SubApp,互为兄弟组件),每个组件在mount,effect和clean的时候打印自身信息。
SubApp.js代码App.js代码
这里,我们在App组件下渲染两个连续的SubApp组件,一个叫A,一个叫B,来看执行结果。
由此,我们可以得出结论,在React16中(重要!),
mount(挂载)的顺序是父组件->子组件
effect(副作用)的顺序是子组件->父组件,而在兄弟(同级)组件中,先渲染的会先执行
实际上,17也是这个顺序,那么我们来看看最新的18版本的情况是怎样的呢。
React18
在代码完全不改变的情况下,我们会得到以下打印结果,
What!竟然是完全一样的,为什么呢?因为我们在index.js里采用的渲染方法依旧是旧的方法,在这种情况下,18的渲染模式和旧版本是没有区别的,下面,我们需要修改index.js,采用并发模式下的渲染方法。
最主要的修改是这一行,
import{createRoot}from"react-dom/client";
通过这个方法渲染出来的App将会使用并发模式(ConcurrentMode)来渲染React应用,这也是React18最主要的更新,它将彻底改变React的核心流程。话不多说,我们来看看打印的结果,
Appmount2Amount2Bmount2AeffectBeffectAppeffectAcleanBcleanAppcleanAeffectBeffectAppeffect
(结果太多,截图截不下了)
并发模式的情况实在太不同了,我们来一一梳理发生了什么,
每一个组件都被mount了两次
子组件的effet首先执行,然后执行父组件的,这里顺序和之前没有不同
子组件的clean执行,然后父组件的clean也执行,顺序和effect执行顺序一致
子组件和父组件的effect再次执行,顺序保持不变
为什么会有clean执行了,这是因为React18并发模式下会强制让组件更新一次,也就是clean->effect,并且会先整体把所有组件清理一遍,再执行所有组件的副作用,而不是穿插着一个个组件交替执行,这是十分有趣的。
好了,这就是本期React执行顺序探究的全部内容了,如果你喜欢本文或者有收获的话,不妨点一个吧~你的支持和鼓励是博主更新的最大动力,多谢多谢!
在线Demo地址
React16:(并发):
原文: