Я пытаюсь использовать глубокие ссылки в проекте React Native с реактивной навигацией, но у меня есть несколько странных сценариев ios на обеих платформах (ios и android).
Мой код NavigationContainer
const linking = {
prefixes: ['https://latineo.com', 'latineo://'],
config: {
Home: {
path: 'homestack',
initialRouteName: 'Explore',
screens: {
Explore: 'explore',
Posts: 'posts',
Favorites: 'favorites',
Settings: 'settings',
},
},
ExploreOptions: {
path: 'explorestack',
initialRouteName: 'Restaurants',
screens: {
Restaurants: 'rts',
ShowRestaurants: 'restaurants',
ShowRestaurant: 'restaurant/:id',
},
}
},
};
<NavigationContainer
theme={navigatorTheme}
ref={(nav: any) => {
navigator = nav;
NavigationService.setNavigator(navigator);
}}
linking={linking}
fallback={<LoadingIndicator
size='giant'
></LoadingIndicator>}
onStateChange={(nav) => {
console.log("AppNavigator -> nav", nav)
}}
>
{isAuth && <HomeNavigator />}
{!isAuth && didTryAutoLogin && didOnboard && didPermission && <AuthNavigator />}
{!isAuth && didTryAutoLogin && !didOnboard && <OnboardScreen />}
{!isAuth && didTryAutoLogin && didOnboard && !didPermission && <LocationPermissionScreen />}
{!isAuth && !didTryAutoLogin && <IsAuthScreen />}
</NavigationContainer>
HomeNavigator
const Stack = createStackNavigator<HomeParamList>();
export const HomeNavigator = (): React.ReactElement => {
return (
<Stack.Navigator
initialRouteName={'Home'}
headerMode='none'
>
<Stack.Screen name='Home' component={HomeTabsNavigator} />
<Stack.Screen name='ExploreOptions' component={LayoutsNavigator} />
<Stack.Screen name='CreateOptions' component={PostNavigator} />
<Stack.Screen name='FavoritesOptions' component={FavoritesNavigator} />
<Stack.Screen name='SettingsOptions' component={SettingsNavigator} />
</Stack.Navigator>
);
};
export const HomeTabsNavigator = (): React.ReactElement => {
return (
<BottomTab.Navigator
screenOptions={TabBarVisibleOnRootScreenOptions}
initialRouteName={'Explore'}
tabBar={props => <HomeBottom {...props} />}>
<BottomTab.Screen name='Explore' component={LayoutsScreen} />
<BottomTab.Screen name='Post' component={PostsScreen} />
<BottomTab.Screen name='Favorites' component={LayoutsScreen} />
<BottomTab.Screen name='Settings' component={SettingsContainer} />
</BottomTab.Navigator>
);
};
Сценарий 1
Когда я пытаюсь (приложение в фоновом режиме) с xcrun simctl загружается с openurl latineo: // homestack / explore или latineo: / / homestack / settings, explorestack / restaurant /: id, et c он работает нормально, но когда приложение закрыто (убито), оно всегда открывает homestack / explore.
Сценарий 2 Когда я пытаюсь использовать explorestack / restaurant /: id, он работает, но когда я нажимаю кнопку, navigation.back (), он возвращается на пустой экран (если я использую жесты с этого белого экрана, я могу вернуться на свой домашний экран).
Something similar happen when I try with explorestack/restaurants when I use back button it navigate to same screen but without header.
без заголовка