reactjs - setState 在 useLayoutEffect 中
问题描述
据我了解,useLayoutEffect
同步运行,而useEffect
异步运行 - 或多或少就像我们useLayoutEffect
使用setTimeout(func,0)
.
useLayoutEffect
旨在“每当效果改变网站的外观时”使用。因此,我假设我应该使用它,例如,如果效果改变了稍后显示给用户的某些状态。
然而,setState
它本身是异步的,这似乎违背了同步的目的useLayoutEffect
——UI 变化只会在下一个滴答声中反映在 DOM 中(除非我们以非 Reactish 的方式直接改变 DOM)。
我不正确理解什么?
解决方案
useLayoutEffect
旨在用于我们需要在浏览器中绘制该循环之前从 DOM 读取/写入某些内容的情况。
正如你所指出的,setState
在浏览器被绘制后,将更新值并触发一个新的循环。根据使用情况,将其包含在 a或中setState
可能是有意义的。例如,如果我们设置了一个值,我们需要在该循环渲染之前从 DOM 中读取,那么它可能是有意义的。useEffect
useLayoutEffect
setState($ref.current.some_value_before_DOM_updates)
推荐阅读
- php - 如何在所见即所得文本上设置字符串长度?(WordPress)
- db2 - 无法通过 db2dsdriver.cfg 设置 CURRENT OPTIMIZATION HINT 特殊寄存器
部分 - selenium-webdriver - 第一个和第二个图像 src 是大写字母,但第三个图像是小写字母
- sql - 限制 WHERE 子句 SQL 查询的列表中的项目数
- reactjs - reactjs中的本地存储对象值检索问题
- python - 如何从前一个整数中减去数组中的每个整数并求和
- c# - 发送 SMTP 邮件时我的 XML 文件中有奇怪的字符
- java - 邮编附件 > 300K CXF 给出 EOFException
- java - 如何在android中创建具有X轴和Y轴值的动态条形图
- botframework - Microsoft Bot Framework - 移交给代理