公司网站集群系统架构及建设思路,网站开发架构图,昆山网站建设哪里好,网站系统参数设置布局上
useEffect在浏览器渲染完成后执行useLayoutEffect在DOM更新后执行
特点
useLayoutEffect 总是比 useEffect 先执行#xff1b;useLayoutEffect与componentDidMount、componentDidUpdate调用时机相同#xff0c;都是在DOM更新后#xff0c;页面渲染前调用#xff1…布局上
useEffect在浏览器渲染完成后执行useLayoutEffect在DOM更新后执行
特点
useLayoutEffect 总是比 useEffect 先执行useLayoutEffect与componentDidMount、componentDidUpdate调用时机相同都是在DOM更新后页面渲染前调用useEffect在页面渲染后调用使用 useLayoutEffect 时里面的作用最好改变布局 否则会占用等待时间useLayoutEffect中进行DOM操作这些DOM修改会与react做出的修改一起被一次性的渲染到页面上只会产生一次回流、重绘防止页面抖动
经验
为了用户体验优先使用 useEffect优先渲染因为大部分时候我们不会去改变DOMuseLayoutEffect 会影响用户看到画面变化的时间
例子
useEffect import React, { useEffect, useState, useLayoutEffect, useRef } from react;
import { render } from react-dom;function App() {const [count, setCount] useState(0);useEffect(() {if (count 0) {const randomNum 10 Math.random()*200setCount(10 Math.random()*200);}}, [count]);return (div onClick{() setCount(0)}{count}/div);
}render(App /, document.getElementById(root)); 在线进行试验:React (forked) - StackBlitz useLayoutEffect import React, { useEffect, useState, useLayoutEffect, useRef } from react;
import { render } from react-dom;function App() {const [count, setCount] useState(0);useLayoutEffect(() {if (count 0) {const randomNum 10 Math.random()*200setCount(10 Math.random()*200);}}, [count]);return (div onClick{() setCount(0)}{count}/div);
}render(App /, document.getElementById(root)); 在线验证React (forked) - StackBlitz