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

网站备案成功后怎么wordpress 移动适配

网站备案成功后怎么,wordpress 移动适配,网络优化工程师证书,wordpress 发布网站想知道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/494206.html

相关文章:

  • 简述网站的建站流程vs2008网站开发
  • 网站seo优化运营东营黄页企业名录
  • 傻瓜式网站开发软件低价网站建设案例
  • 360浏览器打不开90设计网站购物商城网站开发
  • 贵州茅台酒股份有限公司网站门户网站都有哪些内容
  • 学校微网站模板单位网站建设实施方案
  • 盐城公司网站建设电话商标设计生成器
  • 建立网站请示网站营销策略
  • 邯郸移动网站建设费用win的wordpress
  • 呼和浩特网站推广建设电器网站目的及功能定位
  • 个人网站实现与设计论文海淀网站开发公司
  • 标准网站有哪些郑州市网站和公众号建设
  • 全景网站如何做网站底部优化字
  • 心理咨询网站开发网上注册公司营业执照流程
  • 招聘网站哪个好手机网站怎么制作
  • 推广平台网站公司建设网站记什么费用
  • 广州站在哪里产品设计和工业设计有什么区别
  • p2p金融网站开发方案将wordpress压缩包解压至一个空文件夹_并上传它.
  • 网站开发策划个人简历精通网站建设 百度云
  • 建设优化一个网站步骤网页设计个人页面
  • 网站的建设 教学计划wordpress 跳转首页
  • 盐城网盐城网站建设站建设武侯区网站建设哪里好点
  • 网站建设的技术阶段怎样凡科建设网站
  • 手机建设网站目的怎么修改网站标题关键词描述
  • 论坛外链代发湖南网站建设seo
  • 唐山做网站建设公司怎么做刷网站流量生意
  • 深圳网站建设哪家好网站图片自动切换怎么做
  • 网站建设与维护的选择题外贸网站建设可以吗
  • 在线网站建设价值学院网站制度建设
  • 海外sns网站网站建设实训心得及收获