Когда безопасно вызывать `measureInWindow`? - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь выяснить, в какой точке жизненного цикла компонента я могу вызвать measureInWindow в представлении и гарантированно получить правильные значения обратно. Например:

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

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

  return <View ref={ref} />;
};

В приведенном выше примере я получаю 0 для y, а не 88, что является правильным значением, поскольку панель навигации такая высокая. Если я поместил вызов measureInWindow внутри setTimeout с 0ms, тогда я получу правильное значение.

Я также попытался использовать useEffect вместо useLayoutEffect, и я получил то же самое результат.

РЕДАКТИРОВАТЬ

Комментарий к этому сообщению заставил меня взглянуть на onLayout опору для View. Мои начальные тесты показывают, что я могу там успешно позвонить measureInWindow. Однако я все же хотел бы найти какую-то конкретную документацию, выходящую за рамки лишь моего беглого тестирования.

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