当前位置: 首页 > news >正文

网站备案安全承诺书公司名称大全及最新

网站备案安全承诺书,公司名称大全及最新,火狐浏览器下载,北京城建亚泰建设集团有限公司网站想知道useEffect 和 useLayoutEffect 执行时机,首先必须了解React 组件更新生命周期 1、触发更新 setState更新状态父组件更新等 2、渲染阶段 调用组件函数生成虚拟DOMReact进行虚拟DOM对比 3、提交阶段 应用更新DOM(实际修改浏览器DOM)执行u…

想知道useEffect 和 useLayoutEffect 执行时机,首先必须了解React 组件更新生命周期

1、触发更新

  • setState更新状态
  • 父组件更新等

2、渲染阶段

  • 调用组件函数生成虚拟DOM
  • React进行虚拟DOM对比

3、提交阶段

  • 应用更新DOM(实际修改浏览器DOM)
  • 执行useLayoutEffect清理函数(如有)
  • 执行useLayoutEffect副作用(如有)

4、浏览器绘制

  • 浏览器将更新后的DOM渲染到屏幕上

5、useEffect阶段

  • 执行useEffect函数清理(如有)
  • 执行useEffect副作用(如有)

简单来说:
在这里插入图片描述
关键概念详解

1、浏览器绘制
浏览器绘制是什么:浏览器绘制是计算好的DOM结构和样式实际渲染到浏览器屏幕上的这个过程

  • 计算css样式
  • 生成布局
  • 绘制像素
  • 合成图层

2、同步 vs 异步

useLayoutEffect同步执行

// 伪代码表示React内部处理
function commitWork() {commitDOMUpdates(); // 更新DOMflushLayoutEffects(); // 立即执行所有useLayoutEffectrequestPaint(); // 通知浏览器可以绘制了
}

会阻塞浏览器绘制,直到所有useLayoutEffect执行完成

useEffect异步执行

function scheduleEffect() {afterPaint(() => { // 浏览器绘制后flushPassiveEffects(); // 执行useEffect});
}

通过requestIdleCallback或setTimeout等异步API调度

总结:

特性useEffectuseLayoutEffect
执行时机浏览器绘制后异步执行DOM更新后、浏览器绘制前同步执行
可视化影响可能看到闪烁/布局跳动避免布局跳动
性能影响不阻塞渲染可能阻塞渲染
适用场景数据获取、订阅等普通副作用需要同步DOM操作的场景

场景使用推荐:
使用 useLayoutEffect 的场景

1、测试DOM元素

useLayoutEffect(() => {const rect = ref.current.getBoundingClientRect();setSize(rect);
}, []);

2、同步样式调整

useLayoutEffect(() => {tooltipRef.current.style.left = `${buttonRect.left}px`;
}, [buttonRect]);

3、第三方DOM库集成

useLayoutEffect(() => {thirdPartyLib.init(ref.current);return () => thirdPartyLib.destroy();
}, []);

使用 useEffect 的场景

1、数据获取

useEffect(() => {fetchData().then(setData);
}, []);

2、事件订阅

useEffect(() => {const sub = store.subscribe(handleChange);return () => sub.unsubscribe();
}, []);

3、非关键动画

useEffect(() => {const timer = setTimeout(() => {// 动画逻辑}, 100);return () => clearTimeout(timer);
}, []);

错误场景案例
会看到闪烁的例子,但使用了useEffect

function FlashingComponent() {const [width, setWidth] = useState(100);const divRef = useRef();useEffect(() => {// 在绘制后执行,用户会先看到0宽度,再看到100宽度divRef.current.style.width = '100px';}, []);return <div ref={divRef} style={{ width: 0, background: 'red' }} />;
}

正确的版本:使用useLayoutEffect

function StableComponent() {const divRef = useRef();useLayoutEffect(() => {// 在绘制前执行,用户直接看到最终效果divRef.current.style.width = '100px';}, []);return <div ref={divRef} style={{ width: 0, background: 'green' }} />;
}

为什么SSR中不能使用useLayoutEffect?
因为服务端渲染都没有DOM环境,使用会发出警告。可以先判断有没有dom

// 动态检测环境
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;

如何判断是否需要useLayoutEffect?
主要判断自己的副作用是否会导致布局的变化,如果是则用useLayout,否则用useEffect

为什么react不默认使用useLayoutEffect?
因为同步执行会损害性能,所以react团队会建议默认使用useEffect,除非是需要同步任务执行

http://www.dtcms.com/a/400300.html

相关文章:

  • 厦门网站建设方案咨询大连企业网站建设定制
  • Android Studio 详细安装与配置指南
  • 陶瓷类网站建设个人网站设计论文一万字
  • 带数据库的网站模板下载做网站网页的成本
  • 免费网站排名优化在线域名设计与分析
  • 漂亮公司网站源码打包下载大型户外广告设计公司
  • 网站建设 分类wordpress默认index
  • 免费建微网站平台网站换程序 搜索引擎
  • 门户网站建设滞后怎样做网站内链
  • 数字化转型:概念性名词浅谈(第五十讲)
  • Fiber、协程和 Generator行为上的区别?
  • 朝阳区建设工作办公室网站wordpress json
  • 乐山网站开发公司电话用自己的电脑做网站服务器
  • 屏山县建设局网站网站开发能赚钱吗
  • 昌平网站开发自己做网站需要什么条件
  • 昆明网站排名比百度还强大的搜索引擎
  • niche网站建设机械加工网配件销售网
  • 嘉兴做网站费用电话销售电销系统
  • 网站深度功能全网热度指数
  • 变电站智能激光语音综合驱鸟器的适用场景有哪些?
  • codex + windows 环境下使用 serena mcp
  • 测试方案缺少测试设计的推导过程-如何补充
  • 建设网站 翻译儋州个人建站哪家好
  • 网站推广技巧有哪些软件下载类型网站怎么做
  • IP地址管理:docker方式部署phpIPAMv1.7.3
  • 郑州一建集团工程建设有限公司网站网络公司哪个最好
  • 使用 LLVM 16.0.4 编译 MiBench 中的 patricia遇到的 rpc 库问题
  • 第一章:Qt概述
  • 榆次做企业网站猎头公司属于什么行业
  • 江苏省宿迁市建设局网站首页小内存vps WordPress