Реакции-навигация - передача параметров во вложенный навигатор (получение параметров в компоненте Drawer, но НЕ получение его в основных маршрутах)
Я перехожу к StackNavigator (маршрут по умолчанию которого является MaterialBottomTabNavigator), завернутый в DrawerNavigator с параметром. Я могу получить параметр в пользовательском компоненте Drawer. Но не может получить то же самое на экране StackNavigator. Я попытался избежать BottomTabNav, изменив маршрут по умолчанию на простой экран, но результат все тот же.
Вот мой экран приборной панели - вкладка навигатор
const Dashboard = createMaterialBottomTabNavigator(
{
Tab1: Tab1Component,
Tab2: Tab2Component,
...
}
);
Это еще один экран, к которому я перехожу с одной из вышеуказанных вкладок.
class Otherscreen extends Component {
...
render() {
...
<Text>{
this.props.navigation.getParam('userInfo', 'Not Set')
/* FAILS!!! */
}</Text>
...
}
...
}
Следовательно, это стековый навигатор, содержащий
const AppStack = createStackNavigator(
{
'Dashboard': {
'screen': Dashboard,
},
'Otherscreen': {
'screen': Otherscreen
}
}
);
Мне нужен ящик для всего этого, так что завернул все это в
const AppDrawerNavigator = createDrawerNavigator(
{ //Main screen
'AppStack': AppStack
},
{ //Drawer
'contentComponent': Drawer
}
);
где ящик
class Drawer extends Component {
...
render() {
...
<Text>{
this.props.navigation.getParam('userInfo', 'Not Set')
/* WORKS!!! */
}</Text>
...
}
...
}
Для аутентификации и других вещей, таких как всплеск, я использую
const AppNavigator = createSwitchNavigator({
'Splash': Splash,
'Auth': AuthStack,
'App': AppDrawerNavigator,
});
export default createAppContainer(AppNavigator);
Теперь я пытаюсь это сделать.
- В "Всплеске" я проверяю информацию о последнем пользователе.
- Если я получаю его, я проверяю токен сеанса, чтобы увидеть, не истек ли он
- Если не истек срок действия, я перехожу к "App" (экземпляр AppDrawerNavigator выше), с userinfo
- Если я не получаю его, или если сессия истекла, я перехожу к Auth
- Когда аутентификация закончена, я перехожу к "App" (экземпляр AppDrawerNavigator выше) с userinfo
- Если я получаю его, я проверяю токен сеанса, чтобы увидеть, не истек ли он
В любом случае, я собираюсь "App" с тем же параметром userinfo, и я МОГУ получить параметр userinfo в компоненте Drawer.
Но я не получаю его с любого другого экрана в AppStack. Я даже попытался избежать промежуточного BottomTabNav, переместившись на другой экран, чтобы сделать его по умолчанию, а переход к "приложению" переходит к другому экрану, но параметр userinfo все еще недоступен.
Я полагаю, что я должен быть в состоянии получить параметр userinfo из this.props.navigation как на (A) компоненте выдвижного ящика, так и (B) экранах AppStack, или, по крайней мере, на его начальном экране, т.е. компоненте Dashboard
Вот минимальная демонстрация: https://github.com/bhave-abhay/PassPropsIntoNestedNav/ Кроме того, это отчет об ошибке https://github.com/react-navigation/react-navigation/issues/5646
Что происходит в этом случае?!