React Native - параметры, передаваемые компоненту во время навигации, остаются с этим компонентом, когда к нему снова будут переходить позже - PullRequest
0 голосов
/ 14 сентября 2018

В качестве обходного пути с моей настройкой навигации мне пришлось в конечном итоге перейти к дочернему навигатору, прежде чем перейти к маршруту на этом навигаторе (я переходил от родительского навигатора к дочернему навигатору).Когда дочерний навигатор загружается изначально, он загружает CameraScreen.js, но мне нужно было перейти к RentableScreen.js, который является экраном на дочернем навигаторе с CameraScreen.js.Я использовал CameraScreen.js, чтобы добраться до RentableScreen.js из основного App навигатора (HomeScreen.js).Я сделал это, используя addListener для прослушивания, когда страница сфокусирована, и он получает параметр, сообщая ему продолжить на RentableScreen.js, а затем переходит на RentableScreen.js - код для этого приведен ниже:

CameraScreen.js

...

componentDidMount() {    
    this._sub = this.props.navigation.addListener(
      'didFocus',
      () => {
        if(this.props.navigation.getParam('param', '') === 'RentTab') {
          console.log('I HEARD YOU');

          this.navigator && this.navigator.dispatch(
            NavigationActions.navigate({
              routeName: 'Rentable',
            })
          );
        }
      }
    );
  }

...

Все это работает правильно, но похоже, что параметр, который я передаю, получает«застрял» на CameraScreen.js, потому что в следующий раз, когда я пытаюсь перейти к нему (нажав на вкладку на TabNavigator), он действует так, как если бы я отправлял ему параметр, который он получил ранее, но это не так.Кажется, что параметр где-то сохраняется / хранится - как мне его очистить?Или как сделать так, чтобы addListener не обращал внимания при приходе с TabNavigator?

1 Ответ

0 голосов
/ 14 сентября 2018

Этот код работает так, как я хочу:

componentDidMount() {
    this._sub = this.props.navigation.addListener(
      'didFocus',
      () => {
        if(this.props.navigation.getParam('param', '') === 'RentTab') {
          this.navigator && this.navigator.dispatch(
            NavigationActions.navigate({
              routeName: 'Rentable',
            })
          );

          this.props.navigation.state.params = null; //THIS CLEARS THE STATE PARAMS HOW I WAS DESCRIBING
        }
      }
    );
  }
...