【React 】useLayoutEffect 和 useEffect的区别

这篇具有很好参考价值的文章主要介绍了【React 】useLayoutEffect 和 useEffect的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

useLayoutEffectuseEffect是React中常用的两个Hook,它们的主要区别在于触发时机。

  1. useEffect会在渲染完成后异步执行,不会阻塞浏览器的绘制操作。它适用于需要在组件渲染后执行副作用的情况,例如数据的获取、订阅事件等。它不会阻止屏幕更新,因此可能会导致渲染的一次跳跃,用户可能会在页面渲染完成后才看到最终效果。

  2. useLayoutEffect的触发时机稍早于useEffect,在浏览器执行绘制之前同步执行。它适用于需要在DOM更新之后同步执行副作用的情况,例如获取DOM元素的尺寸、位置等。由于它会在页面渲染之前执行,因此可以阻止屏幕更新,确保副作用的执行不会引起渲染跳跃,提供更流畅的用户体验。

需要注意的是,由于useLayoutEffect会在DOM操作之后同步执行,如果执行的操作非常耗时,则可能导致页面响应变慢。在大多数情况下,使用useEffect即可满足需求,只有在确实需要在DOM更新后立即执行副作用时才考虑使用useLayoutEffect

应用useLayoutEffect的场景,比如:文章来源地址https://www.toymoban.com/news/detail-703384.html

React.useLayoutEffect(() => {
    // 环形图自适应宽度设置
    const resizePieWidth = () => {
      const width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
      if (+width >= 992) {
        setPieWidth(165);
      } else if (+width > 1150) {
        setPieWidth(205);
      } else if (+width > 1250) {
        setPieWidth(235);
      } else if (+width > 1350 || +width < 992) {
        setPieWidth(260);
      }
    };
    // 初始时需要触发resize,否则会有样式兼容问题
    resizePieWidth();
    const onResize = debounce(() => {
      resizePieWidth();
    }, 50);
    window.addEventListener('resize', onResize);
    return () => {
      window.removeEventListener('resize', onResize);
    };
  });

到了这里,关于【React 】useLayoutEffect 和 useEffect的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【React】useEffect使用详解

    如果你熟悉 React class 的生命周期函数,你可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合。 componentDidMount 组件挂载 componentDidUpdate 组件更新 componentWillUnmount 组件将要摧毁 使用方法 情况一: useEffect需要传递两个参数,第一个参数是

    2024年02月03日
    浏览(46)
  • react的严格模式 和 解决react useEffect执行两次

    这个问题,主要是刚接触react的时候发的问题,当时也没总结。现在回过头来再总结一次!!! 能发现这个问题的👨‍🎓,一定是一名细心并且有一颗求知的❤️。 因为我当时接触React的时候就是这样的想法。 为什么会触发两次?按照正常的声明周期应该执行一次的!!!

    2024年02月04日
    浏览(38)
  • React的hooks---useEffect

    在函数组件主体内(React 渲染阶段)改变 DOM、添加订阅、设置定时器、记录日志以及执行其他包含副作用的操作都是不被允许的,因为这可能会产生莫名其妙的 bug 并破坏 UI 的一致性 useEffect Hook 的使用则是用于完成此类副作用操作。 useEffect 接收一个包含命令式、且可能有副

    2024年02月15日
    浏览(38)
  • React Hooks 源码解析:useEffect

    React Hooks 源码解析(4):useEffect React 源码版本: v16.11.0 源码注释笔记:airingursb/react 1.1 为什么要有 useEffect 我们在前文中说到 React Hooks 使得 Functional Component 拥有 Class Component 的特性,其主要动机包括: 在组件之间复用状态逻辑很难 复杂组件变得难以理解 难以理解的 class 对

    2024年01月21日
    浏览(42)
  • 通过chatgpt 学习React的useEffect

    定义: useEffect 是 React 中的一个 Hook,它用于处理函数组件中的副作用操作。副作用操作可以包括数据获取、订阅事件、定时器等。 useEffect 接受两个参数:第一个参数是一个回调函数,用于执行副作用操作;第二个参数是一个数组,用于指定依赖项,只有当依赖项发生变化时

    2024年02月10日
    浏览(40)
  • React - useEffect函数的理解和使用

    我们知道,react 的函数组件里面没有生命周期的,也没有 state,没有 state 可以用 useState 来替代,那么生命周期呢? useEffect 是 react v16.8 新引入的特性。我们可以把 useEffect hook 看作是componentDidMount、componentDidUpdate、componentWillUnmounrt三个生命周期的组合。可以让你在函数式组件

    2024年02月13日
    浏览(36)
  • React18的useEffect会执行两次

    前段时间在本地启了一个 React Demo 项目,在编码的过程中遇到一个很奇怪的“Bug”。 其中简化版的代码如下所示。 我是万万没想到,就这样几行简单的代码竟然会触发一个“Bug”。 此“Bug”的表现为: 在 Chrome 控制台里发现 “Hello world!” 被打印了 “两次”。 刷新之后依然

    2024年02月04日
    浏览(42)
  • 理解 React 中的 useEffect、useMemo 与 useCallback

    先理解 useEffect 有助于学习 useMemo 和 useCallback。因为 useMemo 和 useCallback 的实现实际上都是基于 useEffect 的。 useEffect 是 React 中的一个很重要的 Hook,用于执行副作用操作。什么是副作用?简单来说,就是那些会改变函数外部变量或有外部可观察影响的操作。useEffect 允许你在函

    2024年02月03日
    浏览(44)
  • React hooks之useEffect、useMemo优化技巧

    useEffect使用JSON.stringfy进行过滤,避免重复执行 将数组直接放入依赖数组可能不会按预期工作,因为数组比较是基于引用而不是内容。也就是说,如果数组引用没有变,即使数组内容发生了变化,副作用也不会重新运行。或者数组内饿哦那个没有改变但是引用却发生变化时,

    2024年02月12日
    浏览(49)
  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包