据我所知,useLayoutEffect
同步运行,而useEffect
异步运行-或多或少就像我们使用useLayoutEffect
,但使用setTimeout(func,0)
。
useLayoutEffect
用于“每当效果改变网站外观时”。因此,我假设例如,如果效果更改了某些状态,然后将其显示给用户,则应该使用它。
但是,setState
本身是异步的,这似乎违背了useLayoutEffect
的同步目的-UI更改仅在下一个滴答中才会反映在DOM中(除非我们直接对DOM进行更改,以非反应性的方式)。
我不正确理解什么?
答案 0 :(得分:1)
useLayoutEffect
用于在我们需要在浏览器绘制该循环之前需要从DOM读取/写入某些内容的情况下使用。
正如您所指出的,在绘制浏览器之后,setState
将更新该值并触发一个新的循环。根据{{1}}的使用情况,可能需要将其包含在setState
或useEffect
中。例如,如果我们设置一个在循环渲染之前需要从DOM读取的值,那么useLayoutEffect
就有意义。