两者都运行效果,但在相对于浏览器绘制的不同时刻 — 而这个时机差异就是关键所在。
useEffect在浏览器绘制之后运行。它是异步且非阻塞的。将其用于几乎所有东西(数据、订阅、日志)。useLayoutEffect在 DOM 发生变化之后但在浏览器绘制之前同步运行。当您需要读取布局并在同一帧中改变 DOM 以避免明显闪烁时,使用它。
text
render → DOM updated → [useLayoutEffect runs] → browser paints → [useEffect runs]
