我正在导航到一个用参数包裹在 DrawerNavigator 中的 StackNavigator(其默认路由是 MaterialBottomTabNavigator)。我可以在 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);
现在我想做的是这个。
- 在“Splash”,我检查最后一个用户信息。
- 如果我得到它,我会验证会话令牌以查看它是否已过期
- 如果没有过期,我会使用 userinfo 导航到“App”(上面的 AppDrawerNavigator 实例)
- 如果我没有得到它,或者会话已过期,我会导航到 Auth
- 身份验证结束后,我使用用户信息导航到“App”(上面的 AppDrawerNavigator 实例)
- 如果我得到它,我会验证会话令牌以查看它是否已过期
在任何一种情况下,我都将使用相同的 userinfo 参数来“应用”,并且我可以在 Drawer component 中获取 userinfo 参数。
但我没有从 AppStack 中的任何其他屏幕获取它。我什至试图通过将Otherscreen 向上移动到第一个位置使其成为默认值来避免中间的BottomTabNav,然后导航到“App”转到Otherscreen,但userinfo 参数仍然不可用。
我想我应该能够从(A)抽屉组件和(B)AppStack屏幕上的this.props.navigation获取userinfo参数,或者至少它是初始屏幕,即仪表板组件
这是一个最小的演示: https ://github.com/bhave-abhay/PassPropsIntoNestedNav/ 另外,这是错误报告 https://github.com/react-navigation/react-navigation/issues/5646
在这种情况下出了什么问题?!