导航到StackNavigator的底部屏幕,同时为中间屏幕提供参数

时间:2019-08-06 12:51:20

标签: react-navigation react-navigation-stack

背景

我有一个带有两个StackNavigator的应用程序:LoginStack和MainStack。用户完成在LoginStack中的登录后,我将其导航到下一个堆栈:MainStack。

如果这是他们第一次使用该应用程序,则我将其导航到的屏幕是MenuScreen(他们可以通过选择视频向前导航到VideoScreen);但是如果他们以前从MenuScreen中选择了一个视频,我将跳过MenuScreen,直接将其导航到VideoScreen。

但是,当直接跳到VideoScreen时,我发现从VideoScreen调用navigation.goBack()时,MenuScreen被导航回而没有任何导航参数。如何确保提供了这些参数?

AppNavigator

const LoginStack = createStackNavigator({ LoginScreen });
const MainStack = createStackNavigator({
    MenuScreen,
    VideoScreen,
});

const AppNavigator = createSwitchNavigator(
    {
        LoginStack,
        MainStack,
    },
    {
        initialRouteName: "LoginStack",
    }
);

从LoginStack的LoginScreen路由到MainStack的VideoScreen

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
        },
    },
});

在MainStack中从VideoScreen返回到MenuScreen

/* Called from VideoScreen. */
this.props.navigation.goBack();

问题:当VideoScreen呈现时,navigation.state.paramsundefined,因为我们从未明确导航到它。

请注意,如果我们在导航到VideoScreen之前导航到MenuScreen(即,如果我们不跳过中间屏幕),则navigation.state.params 的填充正确。

完整复制

我制作的an Expo Snack是最低限度的复制品。

1 个答案:

答案 0 :(得分:0)

Official response,来自Brent Vatne(React Navigation组织的成员):

  

您必须为此定制路由器:API docs – Custom Routers

     

如何进行这种自定义的示例(实现实际行为取决于您):Excerpt from Brent's React Europe 2019 GitHub repo

因此,在实施解决方案之前,我似乎还需要进一步阅读。回到工作并解决后,我将通过具体解决方案来更新此答案。