什么时候调用“measureInWindow”是安全的?

max*_*son 7 javascript lifecycle reactjs react-native

我试图弄清楚在组件生命周期的哪个点我可以调用measureInWindow视图并保证获得正确的值。例如:

const Measure = () => {
  const ref = React.useRef();

  React.useLayoutEffect(() => {
    ref.current.measureInWindow((x, y) => {
      // y is 0
    })
  });

  return <View ref={ref} />;
};
Run Code Online (Sandbox Code Playgroud)

我在上面的例子中得到0y,而不是88哪个是正确的值,因为导航栏那么高。如果我将measureInWindow调用放在setTimeoutwith 中,0ms那么我会得到正确的值。

我也尝试使用 usinguseEffect而不是,useLayoutEffect我得到了相同的结果。

编辑

对这篇文章的评论让我看到onLayoutView. 我的初步测试表明我可以measureInWindow在那里成功调用。但是,除了粗略的测试之外,我仍然希望找到一些具体的文档。

<View
  ref={ref}
  onLayout={e => {
    ref.current.measureInWindow((x, y) => {
      console.log('onLayout', y);
    });
  }}
/>
Run Code Online (Sandbox Code Playgroud)