【问题标题】:React Navigation switch to same navigator反应导航切换到相同的导航器
【发布时间】:2021-06-12 08:46:43
【问题描述】:

我正在使用 React Native 0.63、Expo 40 和 React Navigation 5。我在 Navigation Container 中具有以下功能组件 - 文字切换导航器:

switch (appState) {
    case 'StateA':
        return <FirstStackNavigator/>;
    case 'StateB':
        return <SecondStackNavigator optionValue={true}/>;
    case 'StateC':
        return <SecondStackNavigator optionValue={false}/>;
    case 'StateD':
        return <ThirdStackNavigator />
}

这是我的 SecondStackNavigator:

<Stack.Navigator>
    <Stack.Screen name="FirstRoute" component={FirstScreen} initialParams={{ option: optionValue }} />
    ...
</Stack.Navigator>

根据幕后的一些事情,应用程序会通过状态 A-D 转换或完全跳过状态 - 这是一个复杂的启动过程。

我的问题是从 StateB 到 StateC 的过渡。当状态转换发生时,什么都没有发生,我想我明白为什么 - 使用相同的导航器,所以 RN 只是不理会层次结构。很公平。

但是,我想要一个与 StateC 一起使用的全新 SecondStackNavigator,第一页在堆栈上,这样我们就可以使用新选项再次跟踪该导航器。

我尝试在屏幕和导航器上使用按键,但没有真正的运气。我是否遗漏了一些 React Navigation 的基础知识,或者我在这里遗漏了什么?

【问题讨论】:

    标签: react-native react-navigation react-navigation-v5


    【解决方案1】:

    这是一个 hacky 建议,如果您将导航器包裹在 StateB 下的 View 中会怎样:

    switch (appState) {
        case 'StateA':
            return <FirstStackNavigator/>;
        case 'StateB':
        // here
            return (
                <View>
                    <SecondStackNavigator optionValue={true}/>;
                </View>
            );
        case 'StateC':
            return <SecondStackNavigator optionValue={false}/>;
        case 'StateD':
            return <ThirdStackNavigator />
    }
    

    【讨论】:

    • 好主意,但没有运气。它给了我同样的行为。我认为 RN5 足够“聪明”,可以看到同一个导航器。我也尝试了 View 的一些变体。
    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多