Если вы пытаетесь получить новые данные в предыдущее представление, и оно не работает, вы можете для начала пересмотреть способ передачи данных в это представление. Вызов goBack
не должен влиять на монтирование предыдущего компонента и, вероятно, не вызовет его конструктор снова, как вы заметили.
В качестве первого шага я хотел бы спросить, используете ли вы Компонент, PureComponent или Функциональный компонент. Судя по вашему комментарию конструктора, вы расширяете класс Component.
Если вы используете компонент, метод рендеринга подлежит shouldComponentUpdate и ценность вашего состояния находится в вашем контроле.
Я бы рекомендовал использовать componentWillReceiveProps для проверки того, что компонент получает новые данные, и гарантируя, что его состояние было обновлено, чтобы отразить новые данные.
Если вы используете конструктор для вызова API или какой-либо асинхронной функции, рассмотрите возможность перемещения этой функции в родительский компонент как маршрута, из которого вы вызываете goBack
, так и компонента, который вы хотите обновить самыми последними данными. . Затем вы можете попросить родительский компонент повторно запросить API или обновить его состояние из дочернего компонента.
Если маршрут C обновляет «состояние/данные» приложения, это обновление должно быть распространено на общий родительский маршрут маршрутов A, B и C, а затем передано как поддержка.
Кроме того, вы можете использовать решение для управления состоянием, такое как Redux, чтобы поддерживать это состояние независимо от родительских/дочерних компонентов. обернет ваши компоненты в компонент connect
более высокого порядка, чтобы получать последние обновления каждый раз, когда изменяется состояние приложения.
TL;DR В конечном счете, похоже, что ответ на ваш вопрос связан с тем, где хранится состояние вашего приложения. Он должен храниться достаточно высоко в вашей иерархии компонентов, чтобы каждый маршрут всегда получал последние данные в качестве реквизита, переданного от его родителя.
person
joel.bowen
schedule
30.09.2017