Условно перезагрузить компонент на основе предыдущего маршрута - PullRequest
0 голосов
/ 30 декабря 2018

Возможно, кто-то может помочь мне с проблемой React Native, с которой у меня react-navigation (2.0.4).У меня есть страница (страница C - RouteShowScreen), которую я хочу условно перезагрузить, в зависимости от того, была ли она перемещена со страницы A (RoutePrepareScreen) или страницы X (любая другая страница, переходящая на страницу C), и я просто не могупохоже, правильные методы жизненного цикла.Чтобы было понятно, я хочу, чтобы страница перезагружалась, если к ней переходили со страницы A (RoutePrepareScreen), но не при переходе к ней с какого-либо другого экрана.Я попытался использовать прослушиватель willFocus, но затем страница C перезагружается независимо от того, была ли на нем навигация со страницы A или страницы B.

RoutePrepareScreen

...

this.props.navigation.navigate("RouteShow", {
  currentLat: latitude,
  currentLng: longitude,
  destinationAddress: this.state.destinationAddress,
  currentAddress: this.formatCurrentAddress(),
  destinationLat,
  destinationLng,
  speed,
  hoursUntilBreak,
  estimatedShiftLength});
}

...

RouteShowScreen

/** This caused the page to reload, regardless of how it was navigated to **/

willFocus = this.props.navigation.addListener(
  'willFocus',
  () => {
    this.handleRouteLoad();
  }
);

/** I also tried using componentWillReceiveProps and adding an additional "reload" navigation parameter, but this threw the
app into an infinite loop **/

componentWillReceiveProps(nextProps) {
  if (nextProps.navigation.state.params.reload) {
    this.handleRouteLoad();
  }
}

1 Ответ

0 голосов
/ 30 декабря 2018

В моем конкретном случае я смог заставить это работать, сбросив стек навигации при навигации изнутри RoutePrepareScreen - вот так:

    const resetAction = StackActions.reset({
      index: 0,
      actions: [
        NavigationActions.navigate({
          routeName: "RouteShow",
          params: {
            currentLat: latitude,
            currentLng: longitude,
            destinationAddress: this.state.destinationAddress,
            currentAddress: this.formatCurrentAddress(),
            destinationLat,
            destinationLng,
            speed,
            hoursUntilBreak,
            estimatedShiftLength,
          }
        })
      ],
    });
    this.props.navigation.dispatch(resetAction);

Однако мне это кажется немного грязным(и может быть несостоятельным, если вариант использования не может обработать полный сброс стека навигации).Мне было бы любопытно увидеть другое решение!

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