Почему componentDidMount не выполняется при переходе к исходному маршруту с другого экрана? - PullRequest
1 голос
/ 01 июня 2019

Я использую реагирующую навигацию для своего мобильного приложения, и у меня есть 2 маршрута - Домой и Фавориты, где Домой является начальный маршрут. Оба из этих компонентов имеют componentDidMount. Всякий раз, когда я перемещаюсь к Favoriti из Home, компонент Favoriti монтируется, но когда я возвращаюсь обратно в Home, его componentDidMount не выполняется. Он запускается только в первый раз, когда я открываю приложение, но мне нужно его монтировать каждый раз, когда я к нему обращаюсь.

import { createStackNavigator, createAppContainer} from 'react-navigation';
import  Home  from './views/Home';
import Favoriti from './views/Favoriti';

const MainNavigator = createStackNavigator({

    FavoritiRT: Favoriti,
    HomeRT: Home
  },
  {
    initialRouteName: "HomeRT"
  }
);

const MyRoutes = createAppContainer(MainNavigator);

export default MyRoutes;

Ошибка не отображается, просто componentDidMount исходного маршрута выполняется не каждый раз, когда я к нему перехожу, а с другими маршрутами.

Ответы [ 2 ]

2 голосов
/ 01 июня 2019

«componentDidMount» больше не запускается, поскольку компонент «Home» уже создан и будет существовать до тех пор, пока он находится в стеке. Этот экземпляр компонента Home будет повторно использован, и пользователь продолжит работу с того места, на котором остановился, когда вернется к этому компоненту Home. Чтобы снова запустить componentDidMount, необходимо запустить новый экземпляр компонента Home.

Вместо использования кнопки «Назад». Создайте кнопку и в подпорке onPress перейдите к новому экземпляру Home, используя метод push.

<Button
  title="Home"
  onPress={() => this.props.navigation.push('Home')}
/>

https://reactnavigation.org/docs/en/navigating.html#going-back

Edit:

Пока это запустит ваше приложение; Сфратини делает хорошую мысль, и его ответ будет для вас лучше, если вы в конечном итоге будете работать на компанию / клиента или опубликуете свое собственное приложение. Добавление слушателя было бы идеально по всем причинам, которые он сказал.

1 голос
/ 01 июня 2019

Ответ Раймонда должен сработать, а объяснение - то же самое.ComponentDidMount запускается только один раз, и нет необходимости запускать его снова, поскольку у вас есть Home в вашем стеке.

Я бы порекомендовал добавить прослушиватель для компонента WillReceiveProps, который также должен запускаться при повторной загрузке главного экрана, и вы можете увидеть, нужно ли обновить или перезагрузить экран.

Но, конечно, это зависит от вашего варианта использования.Если вы продолжаете толкать домашний экран в стеке, единственным уменьшением является то, что как только пользователь достигает Home, обычно кнопка «Назад» должна означать «выход из приложения», а если вы толкаете его в стек и нажимаете назад, вы просто идетеназад один экран.Быть может, это плохой UX, но если у вас все хорошо, хорошо.

...