Как уничтожить всех подписчиков Слушателей в реакции навигации? - PullRequest
1 голос
/ 20 мая 2019

Я добавил слушателей в собственное приложение реагирования, используя его навигацию по реакции.Я использую слушатель willFocus для отслеживания фокуса экрана.Он работает нормально, но я не могу удалить этого слушателя. Как удалить этот слушатель? .

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

componentDidMount(){
  const {navigation} = this.props;
  navigation.addListener ('willFocus', () => {
    //code when screen focused
  })
}

componentWillUnmount(){
  //does not executing when move to stack navigator so unable to remove listner
}
const AppStack = createStackNavigator({
  TabNav: createBottomTabNavigator(
         Tab1: Tab1, 
         Tab2: Tab2,
         Tab3: Tab3
  ),
  screen1: screen1,
  screen2, screen2, 
  screen3: screen3
})

1 Ответ

0 голосов
/ 20 мая 2019

Вы можете использовать NavigationEvents компонент из react-navigation.

В вашем методе рендеринга вы можете использовать этот компонент следующим образом:

import { NavigationEvents } from 'react-navigation';
...
...
render(){
 return(
 <View>
    <NavigationEvents
      onWillFocus={payload => console.log('will focus',payload)}
      onDidFocus={payload => console.log('did focus',payload)}
      onWillBlur={payload => console.log('will blur',payload)}
      onDidBlur={payload => console.log('did blur',payload)}
    />
    {/* 
      Your other code
    */}
  </View>
 )
}
...

Вы можете использовать этот метод, чтобы узнатьсфокусирован ли экран или нет.

Подробнее см. Документы

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