0

我在我的 React 本机应用程序上使用 React-navigation 6 我在每个堆栈上有两个StackNavigator屏幕BottomStackNavigator和参数:

export type BottomNavigationStack = {
    Planner: undefined,
    Profile: undefined,
}

export type PlannerNavigationStack = {
    PlannerHome: undefined,
    PlannerDetails: {
        detail: { ... }
    },
    Profile: {
        screen: string,
        initial?: boolean,
        params?: { [name: string]: string }
    }, // We can go to ProfileNavigationStack from PlannerNavigationStack
}

export type PlannerNavDetailProps = StackScreenProps<PlannerNavigationStack, 'PlannerDetails'>

export type ProfileNavigationStack = {
    ProfileHome: undefined,
    ProfileAddThings: {
        service: string
        from: string,
    },
    Planner: {
        screen: string,
        initial?: boolean,
        params?: { [name: string]: string }
    }, // We can go to PlannerNavigationStack from ProfileNavigationStack
}

export type ProfileNavAddThingsProps = StackScreenProps<ProfileNavigationStack, 'ProfileAddThings'>

所以我试图从 PlannerStack 导航到 ProfileStack,当我在 ProfileStack 中时,我想回到 PlannerStack。

我从 PlannerStack 去 ProfileStack 没有问题,如下所示:

navigation.navigate('Profile', {
    screen: 'ProfileAddThings',
    params: {
        service: 'myservice',
        from: 'myfrom',
    },
    initial: false,
})

所以在那一刻我ProfileStack在屏幕上ProfileAddThings。如果我阅读文档,PlannerStack保留它的历史记录,如果我点击 Planner 的 bottomTab 按钮,我可以看到页面仍然是PlannerDetails. 但是,当我点击屏幕的后退按钮时ProfileAddThings,我会回到ProfileHome。我试图用该代码覆盖屏幕的 backButton 操作ProfileAddThings

navigation.navigate('Planner', { screen: 'PlannerDetails' })

但我得到了错误:undefined is not an object (evaluating 'route.params.detail')

细节是PlannerDetails屏幕的一个参数。

我真的不明白为什么这个参数是未定义的,因为 de PlannerStack 历史仍然存在。

有人已经从 react native 中的嵌套导航返回?

谢谢

4

1 回答 1

0

您需要获取父导航器。您可以通过在当前屏幕中使用 getParent() 方法来做到这一点。将是这样的:

let parent = navigation.getParent(); // This will assing PlannerStack to the parent variable. 

那么您应该使用路线名称调用导航方法

parent.navigate('PlannerDetails');

路线历史记录,从屏幕注册孔组件(在您的情况下为 PlannerStack),在您的 PlannerStack 中,初始路由可能是 ProfileHome,这就是您使用后退按钮时到达那里的原因。

于 2021-12-28T19:58:08.110 回答