Когда происходит событие willFocus? (Реагируют-навигации) - PullRequest
2 голосов
/ 23 января 2020

Давайте предположим следующий простой сценарий:

У нас есть два экрана: A и B . Мы перемещаемся с экрана A на экран B . React Navigation генерирует событие willFocus для B

class B extends React.Component (

    componentDidMount(){
        fetchServerData() // fetches some data
    }

    render(){
      <View>
        <NavigationEvents
          onWillFocus={someFunc}
        />
      </View>
    );
}

Я заметил, что someFun c будет работать в любом случае, однако это меня удивляет, когда событие willFocus испускается из React Navigation? Я ожидаю, что в первый раз someFun c не будет запущен, поскольку событие генерируется в тот момент, когда мы указываем экрану A перейти к экрану B и поэтому слушатель для B еще не установлен.

Это также послужило бы моему (и я представляю многим другим) сценарию использования, как и в текущей реализации, fetchServerData будет беги дважды. Это заставляет меня добавить задержку при рендеринге NavigationEvents, в противном случае я получаю данные, которые выбираются дважды.

Есть ли какие-либо идеи по этому поводу?


РЕДАКТИРОВАТЬ: Что я делал так далеко рендерится NavigationEvents после того, как loading состояние prop установлено в false, к тому времени уже достаточно поздно, чтобы настроить слушатель willFocus , но мне жаль, что документы не описывают, когда генерируется событие willFocus

1 Ответ

0 голосов
/ 24 января 2020

События навигации генерируются при обновлении состояния родительского навигатора.

Я ожидаю, что первый раз, когда someFunc не будет запущен, поскольку событие генерируется в тот момент, когда мы указываем экрану А перейти к экран B и, следовательно, слушатель для B еще не установлен.

В React дочерний componentDidMount / componentDidUpdate вызывается первым, прежде чем вызывается родительский componentDidMount / componentDidUpdate. Поскольку родитель не может завершить обновление sh до тех пор, пока дочерний процесс не завершит обновление.

Таким образом, к тому времени, когда родительский процесс завершит обновление и отправит события, дочерний элемент уже смонтировал и добавил прослушиватель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...