Я использую, чтобы столкнуться с той же проблемой. Я заставил мой экран Post
прослушивать событие фокусировки навигации, вызванное react-nativation
здесь вместо componentDidMount
.
import React from 'react';
import { View } from 'react-native';
import { NavigationEvents } from 'react-navigation';
const Post = () => (
<View>
<NavigationEvents
onWillFocus={payload => console.log('will focus',payload)}
onDidFocus={payload => console.log('did focus',payload)} //
onWillBlur={payload => console.log('will blur',payload)}
onDidBlur={payload => console.log('did blur',payload)}
/>
{/*
Your view code
*/}
</View>
);
С помощью onDidFocus
вы можете получить параметр навигации, получить данные и / или обновить состояние. При необходимости вы можете очистить состояние экрана с помощью onDidBlur
.
Кроме того, вы можете сделать императивное кодирование как этот документ здесь
Обновление:
Кстати, мне интересно, почему вы положили Post
с Drawer? Это просто иметь ссылку в ящике, которая может получить доступ к странице сообщения?
На мой взгляд, вы должны переместить Home
и Post
в новый стек и сделать Home
в качестве начального маршрута. Это обеспечит размонтирование сообщения после перехода обратно к Home
.
Проверьте мой образец ниже
const HomeStack = createStackNavigatior({
Home: {screen: Home},
Post: {screen: Post},
}, {
initialRouteName: 'Home',
...
})
const Drawer = createDrawerNavigator(
{
HomeStack
Settings: {screen: Settings}
},
{
initialRouteName: "HomeStack",
backBehavior: 'initialRoute',
contentOptions: {
activeTintColor: "#e91e63"
},
contentComponent: props => <SideBar {...props} />,
}
);