useLayoutEffect在哪个上下文中运行,测量dom尺寸是否可靠?

问题描述 投票:0回答:0

我多次阅读关于 useLayoutEffect 的新 React 文档,这让我很困惑

首先,它说:

useLayoutEffect 触发before浏览器重绘屏幕

根据我的理解,这意味着在 useLayoutEffect 完成之前的所有状态对用户都是不可见的,这实际上是一个好点,它可以用来防止一些不需要的“中间状态”可见,这将引入一种轻弹的视觉效果经验。此外,文档中的代码示例似乎也证明了这一点

也有类似的说法:

调用 useLayoutEffect 在浏览器重绘屏幕之前执行布局测量

在您的组件首次添加到 DOM 之前,React 将运行您的设置函数

我的问题是

如何在节点真正进入 DOM 之前测量 dom?如果它已经在 DOM 中,如何让它不可见?

我知道react是以“并发模式”运行的,“render”和“DOM commit”不一定是一对一的关系,所以组件渲染的一些“中间状态”没有机会commit到dom。例如,如果状态更改后是

layouteffect
,如果有
layouteffect
再次更改状态,则结果可能会被丢弃。

但是,唯一测量节点维度的可靠方法真正将其附加到DOM,DOM是一个相当复杂的环境,如果节点在“分离模式”下无法知道它的信息附加到 DOM,它肯定是可见的。

那么,react 如何绕过 DOM 限制并施展魔法呢?还是我理解有问题

layouteffect

html reactjs dom react-hooks
© www.soinside.com 2019 - 2024. All rights reserved.