【问题标题】:React Hooks: What is the difference between 'useMutationEffect' and 'useLayoutEffect'?React Hooks:“useMutationEffect”和“useLayoutEffect”有什么区别?
【发布时间】:2018-11-28 07:03:04
【问题描述】:

useMutationEffectuseLayoutEffect在用法上有什么区别?

我已阅读所有可用的在线资料,包括(但不限于)

  1. Hooks Reference
  2. Blog post by Kent

useEffect 和其他两个钩子之间的区别很明显。但是useMutationEffectuseLayoutEffect之间的区别还不清楚。

我知道执行顺序是:

  1. 使用MutationEffect
  2. 使用布局效果
  3. 使用效果

【问题讨论】:

    标签: reactjs react-hooks


    【解决方案1】:

    首先,你要了解different phases of Rendering

    对用户可见的 DOM 突变必须在下一次绘制之前同步触发,以便用户不会感知到视觉上的不一致。对于这种特定情况,我们应该使用useMutationEffectuseLayoutEffect 来执行阻塞的视觉更新。这两者之间的唯一区别是如果我们想从 DOM 中读取 Layout,我们应该使用useLayoutEffect。否则,我们应该使用useMutationEffect

    1. useMutationEffect

    它在布局阶段之前同步触发,即在 React 执行其 DOM 突变的同一阶段。使用它来执行阻止自定义 DOM 突变,而无需进行任何 DOM 测量/读取布局。

    1. useLayoutEffect

    它在所有 DOM 突变之后但在 Paint 阶段之前同步触发。使用它从 DOM 中读取布局(样式或布局信息),然后根据布局执行阻止自定义 DOM 突变。

    1. useEffect

    它在渲染提交到屏幕后运行,即在布局和绘制阶段之后。尽可能使用它来避免阻止视觉更新。

    更新: useMutationEffect 挂钩已从 Hooks API in this PR 中删除。 (学分:Dhaval Patel

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2016-04-11
      • 2019-10-07
      • 2020-01-21
      • 2019-09-27
      • 2016-03-29
      相关资源
      最近更新 更多