Почему компонентDidMount не выполняется, когда я перехожу к начальному маршруту с другого экрана?

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

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;

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 017
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

"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

Редактировать:

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

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

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

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

Спасибо за Ваш ответ. Я попытался добавить прослушиватель, но componentWillReceiveProps не срабатывал, когда я возвращался на главный экран. Использование замены вместо навигации сработало для меня.

Armin Dervić 02.06.2019 15:06

Другие вопросы по теме