React-Native-Navigation TabNavigator функция изменения экрана?

Я использую в своем приложении навигатор вкладок react-native-navigation, и на одном из моих экранов у меня есть кнопка, с помощью которой вы можете воспроизводить музыку. Однако если вы нажмете кнопку, а затем перейдете на другой экран (с помощью панели вкладок), музыка продолжит воспроизведение. Я пытаюсь найти способ остановить музыку, когда пользователь переходит на другой экран.

Есть ли что-то похожее на метод componentDidUnmount (), который я могу вызвать при изменении экрана?


person cobbs_jobs    schedule 22.05.2017    source источник


Ответы (2)


Здесь есть два варианта (о которых я знаю), и ни один из них не очень хорош.

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

Во-вторых, вы можете попробовать использовать onNavigationStateChange, но мне это кажется хакерским - и я » Я не уверен, насколько хорошо это на самом деле сработает.

person Spencer Carli    schedule 23.05.2017
comment
Да, я не мог понять, как использовать onNavigationStateChange в этой ситуации. Похоже, это сокращение! Спасибо за ваш вклад - person cobbs_jobs; 24.05.2017

Начиная с v1.0.0-beta.28, теперь вы можете подписаться на своих экранах на некоторые события вкладок (willFocus, didFocus, willBlur, didBlur):

componentDidMount() {
this._sub = this.props.navigation.addListener(
    'willFocus',
    this.yourCallback
  );
}

componentWillUnmount() {
  this._sub.remove();
}

Подробнее здесь: https://github.com/react-navigation/react-navigation/pull/3345

person gonzaloriestra    schedule 12.02.2018