我有一个带有两个StackNavigator的应用程序:LoginStack和MainStack。用户完成在LoginStack中的登录后,我将其导航到下一个堆栈:MainStack。
如果这是他们第一次使用该应用程序,则我将其导航到的屏幕是MenuScreen(他们可以通过选择视频向前导航到VideoScreen);但是如果他们以前从MenuScreen中选择了一个视频,我将跳过MenuScreen,直接将其导航到VideoScreen。
但是,当直接跳到VideoScreen时,我发现从VideoScreen调用navigation.goBack()
时,MenuScreen被导航回而没有任何导航参数。如何确保提供了这些参数?
const LoginStack = createStackNavigator({ LoginScreen });
const MainStack = createStackNavigator({
MenuScreen,
VideoScreen,
});
const AppNavigator = createSwitchNavigator(
{
LoginStack,
MainStack,
},
{
initialRouteName: "LoginStack",
}
);
const videoScreenParams = {
originStack: "LoginStack",
originScreen: "LoginScreen"
};
/* Called from the InitStack.
* First we navigate to the MainStack, then we perform a sub-action
* to navigate to the VideoScreen within that stack. */
this.props.navigation.navigate({
routeName: "MainStack",
params: {},
action: {
type: "Navigation/NAVIGATE",
routeName: "VideoScreen",
params: {
videoScreenParams
},
},
});
/* Called from VideoScreen. */
this.props.navigation.goBack();
问题:当VideoScreen呈现时,navigation.state.params
是undefined
,因为我们从未明确导航到它。
请注意,如果我们在导航到VideoScreen之前导航到MenuScreen(即,如果我们不跳过中间屏幕),则navigation.state.params
的填充正确。
我制作的an Expo Snack是最低限度的复制品。
答案 0 :(得分:0)
Official response,来自Brent Vatne(React Navigation组织的成员):
您必须为此定制路由器:API docs – Custom Routers
如何进行这种自定义的示例(实现实际行为取决于您):Excerpt from Brent's React Europe 2019 GitHub repo
因此,在实施解决方案之前,我似乎还需要进一步阅读。回到工作并解决后,我将通过具体解决方案来更新此答案。