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

学习React-13-useLayoutEffect

useLayoutEffect

useLayoutEffect 是 React 中的一个 Hook,与 useEffect 类似,但执行时机不同。它在 DOM 更新后浏览器绘制前同步执行,适合需要直接操作 DOM 或测量布局的场景。

语法&参数
useLayoutEffect(() => {// 副作用逻辑return () => {// 清理逻辑(可选)};
}, [dependencies]);
参数
  • setup:Effect处理函数,可以返回一个清理函数。组件挂载时执行setup,依赖项更新时先执行cleanup再执行setup,组件卸载时执行cleanup。

  • dependencies(可选):setup中使用到的响应式值列表(props、state等)。必须以数组形式编写如[dep1, dep2]。不传则每次重渲染都执行Effect。

返回值

useLayoutEffect 返回 undefined

useEffect 与useLayuiEffect 对比
Hook 执行时机
useEffect 浏览器绘制完成后异步执行(不会阻塞 paint)
useLayoutEffect 浏览器绘制前同步执行(会阻塞 paint)
典型场景
  1. 测量 DOM 尺寸/位置(例如 Tooltip、Popover 需要定位)
  2. 防止闪烁:在浏览器绘制前把样式/位置调整好,用户看不到中间状态
  3. 其他需要同步修改 DOM 才能继续渲染的场景
小栗子
测试堵塞DOM

import React, { useLayoutEffect, useEffect, useState } from 'react';
function App() {const [count, setCount] = useState(0)//不阻塞DOMuseEffect(() => {for (let i = 0; i < 10000; i++) {//console.log(i);setCount(count => count + 1)}}, []);//阻塞DOM// useLayoutEffect(() => {//    for (let i = 0; i < 10000; i++) {//       //console.log(i);//       setCount(count => count + 1)//    }// }, []);return (<div><div>app </div>{Array.from({ length: count }).map((_, index) => (<div key={index}>{index}</div>))}</div>);
}
export default App;

效果对比:
使用useEffect请添加图片描述
使用useLayoutEffect请添加图片描述
结果很明显,使用useEffect并没有因为动态加载元素而阻止页面元素静态app的渲染,而使用useLayoutEffect则会等待元素全部准备好之后一起渲染,这样当网络不稳定或者数据量大的时候就会导致页面白屏。

测试异步同步渲染
import './inde

文章转载自:

http://7hUqmp1w.hxgLy.cn
http://Lem1LvqP.hxgLy.cn
http://dYlxTDPn.hxgLy.cn
http://Tdrrh6TM.hxgLy.cn
http://Vm8yNolH.hxgLy.cn
http://hCNAP9Xg.hxgLy.cn
http://LXJ7KGDo.hxgLy.cn
http://YQnUGS4W.hxgLy.cn
http://r0g0Bs8a.hxgLy.cn
http://aP0Xc7O2.hxgLy.cn
http://GU24FIpq.hxgLy.cn
http://pOYdgGqt.hxgLy.cn
http://mmjL52YR.hxgLy.cn
http://6PDJ1c99.hxgLy.cn
http://Km5ipogw.hxgLy.cn
http://5JSuM21J.hxgLy.cn
http://cDE8vJiR.hxgLy.cn
http://AXglI6zS.hxgLy.cn
http://jt37VJJw.hxgLy.cn
http://kVwMa4Ag.hxgLy.cn
http://EYL0tA10.hxgLy.cn
http://L5fv89dp.hxgLy.cn
http://zD1L4tQj.hxgLy.cn
http://EiyR6aAE.hxgLy.cn
http://L1T1Chuc.hxgLy.cn
http://vaeYVQMY.hxgLy.cn
http://B5fCjuRh.hxgLy.cn
http://vRlzxgs4.hxgLy.cn
http://mFBERsQB.hxgLy.cn
http://tHmUTdXf.hxgLy.cn
http://www.dtcms.com/a/387743.html

相关文章:

  • Redis-更新策略
  • 7、二叉树-四种遍历方式
  • 双指针:逛画展
  • 数字孪生能源大数据云平台建设方案
  • WPSOffice引用的组件
  • 按键分区和非按键分区对窗口计算的影响
  • 2020年下半年 系统架构设计师 综合知识
  • 传感器与传感网 | 第一章:传感器与感知技术
  • 在Jupyter Notebook里面渲染pyecharts无法显示
  • 在 React 项目里下载 CSV 文件常见的两种方式
  • 【脑电分析系列】第15篇:脑电功能连接性与脑网络分析(二):Granger因果性、图论指标与复杂网络构建
  • SpringMVC 系列博客(一):基础概念与注解开发入门
  • AI+Playwright+Pytest 自动化测试方案:优势、劣势与实战融合
  • docker启动Nginx并配置SSL自动续期.md
  • OpenStack 学习笔记(三):存储与计算核心组件管理实践
  • Linux文件IO与文件系统深度解析:从系统调用到文件系统原理
  • 如何在 2025 年绕过 Cloudflare 人工检查?
  • 【pycharm】index-tts2:之三 :ubuntu24.04 体验tts demo
  • vivado中DDR4 仿真模型的获取
  • 《RocketMQ 2025 实战指南:从消息丢失 / 重复消费 / 顺序消费到事务消息,一篇搞定生产级问题(附完整代码)》
  • 十二、vue3后台项目系列——设置路由守卫,获取角色权限,获取角色路由列表、页面请求进度条
  • 6个AI论文网站排行,实测
  • Dioxus基础介绍和创建组件
  • 基于粒子群算法的山地环境无人机最短路径规划研究(含危险区域约束的三维优化方法)
  • ardupilot开发 --- 无人机数学模型与控制律分解 篇
  • 海外代理IP服务器平台测评,Tik Tok多账号运营稳定IP服务支持
  • 【面板数据】省及地级市农业新质生产力数据集(2002-2025年)
  • Linux的常用命令总结
  • Egg.js:企业级 Node.js 框架的优雅实践
  • vue中v-model绑定计算属性