反应导航-嵌套重定向

时间:2020-05-27 13:10:41

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

我具有以下导航结构

const HomeTabNavigator = () => (
    <Tab.Navigator>
        <Tab.Screen name="HomeStackNavigator"/>
        <Tab.Screen name="SearchStackNavigator"/>
        <Tab.Screen name="AccountStackNavigator" />
    </Tab.Navigator>
);

const HomeStackNavigator = () => {
    return (
        <HomeStack.Navigator headerMode="none">
            <HomeStack.Screen name="HomeScreen" component={HomeScreen}/>
        </HomeStack.Navigator>
    )
}

const SearchStackNavigator = () => {
    return (
        <SearchStack.Navigator headerMode="none">
            <SearchStack.Screen name="SearchScreen" component={SearchScreen}/>
            <SearchStack.Screen name="SearchDetailScreen" component={SearchDetailScreen}/>
        </SearchStack.Navigator>
    );
}

const AccountStackNavigator = () => {
    return(  
        <AccountStack.Navigator headerMode="none">
            <AccountStack.Screen name="AccountScreen" component={AccountScreen}/>
            <AppointmentStack.Screen name="ItemListScreen" component={ItemListScreen}/>
            <AppointmentStack.Screen name="ItemDetailScreen" component={ItemDetailScreen}/>
        </AccountStack.Navigator>
    );
}

我想从任何屏幕导航到ItemDetailScreen中的AccountStackNavigator,比方说,我想从HomeScreen导航。但是,当我单击ItemDetailScreen的后退按钮时,它必须将我重定向到ItemListScreen,并且此屏幕上的后退按钮必须将我重定向到AccountScreen

我正在使用以下屏幕进行重定向。

this.props.navigation.navigate('AccountStackNavigator', {
    screen: 'AppointmentListScreen',
    params: {
        screen: 'AccountScreen'
    }
});

这会将我从HomeScreen重定向到AppointmentListScreen,当我单击此处时,它会将我重定向到AccountScreen,这是完美的。现在是我使用此代码时的问题。

this.props.navigation.navigate('AccountStackNavigator', {
    screen: 'AppointmentDetailScreen',
    params: {
        screen: 'AppointmentListScreen',
        params: {
            screen: 'AccountScreen'
        }
    }
});

它完美地将我重定向到AppointmentDetailScreen,但是,当我单击此处的“后退”按钮时,它会将我重定向到HomeScreen,而我希望通过以下流程将其重定向。

AppointmentDetailScreen > AppointmentListScreen > AccountScreen

我已经尝试了很多方法来实现这一目标,但是似乎对我没有任何帮助,任何人都可以向正确的方向提供帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

使用self.child来实现这一目标是令人沮丧的,主要是因为它在切换屏幕之间缺乏动画效果,给用户带来了怪异的体验,因此我选择了@react-navigation/bottom-tabs并运行良好。