useLayoutEffect中的setState

时间:2020-11-04 15:44:30

标签: reactjs react-hooks

据我所知,useLayoutEffect同步运行,而useEffect异步运行-或多或少就像我们使用useLayoutEffect,但使用setTimeout(func,0)

useLayoutEffect用于“每当效果改变网站外观时”。因此,我假设例如,如果效果更改了某些状态,然后将其显示给用户,则应该使用它。

但是,setState本身是异步的,这似乎违背了useLayoutEffect的同步目的-UI更改仅在下一个滴答中才会反映在DOM中(除非我们直接对DOM进行更改,以非反应性的方式)。

我不正确理解什么?

1 个答案:

答案 0 :(得分:1)

useLayoutEffect用于在我们需要在浏览器绘制该循环之前需要从DOM读取/写入某些内容的情况下使用。

正如您所指出的,在绘制浏览器之后,setState将更新该值并触发一个新的循环。根据{{​​1}}的使用情况,可能需要将其包含在setStateuseEffect中。例如,如果我们设置一个在循环渲染之前需要从DOM读取的值,那么useLayoutEffect就有意义。