【发布时间】:2021-05-14 20:19:28
【问题描述】:
useLayoutEffect 与 useEffect 的一个区别是 useLayoutEffect 将在 DOM 突变之后和浏览器绘制阶段之前同步触发。 (Reference)
但是,我遇到了一些文章,它们似乎都建议使用useLayoutEffect 进行阅读布局。
签名与 useEffect 相同,但它会在所有 DOM 突变后同步触发。 使用它从 DOM 中读取布局并同步重新渲染。在 useLayoutEffect 中安排的更新将在浏览器有机会绘制之前同步刷新。
useLayoutEffect:如果您需要改变 DOM 和/或确实需要执行测量。
在可能的情况下,如果您希望在浏览器绘制过程的处理中不引人注目,请选择 useEffect Hook。在现实世界中,这通常是大多数时候! 好吧,除非你从 DOM 中读取布局或做一些需要尽快绘制的与 DOM 相关的事情。
据我了解,当useEffect 被触发时,浏览器已经通过了布局和绘制阶段,所以在useEffect 中读取布局应该是完全可以的。
所以我的问题是:阅读布局时,useLayoutEffect 是否优于 useEffect,如果是,为什么?假设我只是阅读了布局,并没有在效果中执行任何额外的状态更改。
【问题讨论】:
-
对于 reading - 它并不可取,对于 attaching 它确实如此,与文档中提到的相同
标签: reactjs react-hooks use-effect