Где вызвать addListener в реагировать на родной - PullRequest
0 голосов
/ 09 апреля 2019

Мы работаем над проектом React Native. В этом, мы показываем вкладку в этом, а также боковую панель тоже. Итак, для этой боковой панели мы добавили библиотеку реакции-навигации Но, в Android, если пользователь нажмет на кнопку «Назад» этого устройства, если ящик открыт, мы должны закрыть его.

Итак, мы добавляем addListener в componentDidMount() и удаляем его в componentWillUnmount().

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

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

Мы знаем, что componentDidMount будет вызываться только один раз во время запуска этого экрана.

Мы знаем, что можем вызвать метод рендеринга, но мы ожидаем, что вызовем его с хорошей практикой.

И есть ли способ сделать его глобальным, вместо того, чтобы писать вызов классы закрытия ящика.

Код:

componentDidMount() {
    BackHandler.addEventListener('backTapped', this.backButtonTap);
}
  componentWillUnmount() {
    BackHandler.removeEventListener('backTapped', this.backButtonTap);

}

 backButtonTap = () => {
   navigation.dispatch(DrawerActions.closeDrawer());
}

Есть предложения?

1 Ответ

1 голос
/ 09 апреля 2019

Я бы предложил использовать собственный слушатель Navigation Lifecycle Navigation, чтобы вы также могли обрабатывать различные кнопки возврата на разных страницах.

componentDidMount() {
    this.willFocusListener = navigation.addListener('willFocus', () => {
      BackHandler.addEventListener('backTapped', this.backButtonTap);
    });
    this.willBlurListener = navigation.addListener('willBlur', () => {
      BackHandler.removeEventListener('backTapped', this.backButtonTap);
    });
}

componentWillUnmount() {
    this.willFocusListener.remove();
    this.willBlurListener.remove();
}

Тогда Компонент NavigationEvents тоже может быть полезным

...