Компоненты вне компонентов Stack.Screen
не получают навигационную опору. Так что в этом случае вы должны получить NavigationContainer
, используя ссылки в компоненте нижнего колонтитула, следующим образом:
- Создайте ссылку с помощью
const myRef = React.createRef()
- и передайте ее
<NavigationContainer ref={myRef}>
и - используйте эту ссылку для навигации,
myRef.current?.navigate(name, params)
.
Это все объяснено здесь . Документы здесь отделяют создание ссылки в новом файле, чтобы позволить вам импортировать ссылку без циклов / проблем зависимости. В качестве документа вы можете теперь вызывать RootNavigation.navigate('ChatScreen', { userName: 'Lucy' });
в любом модуле js, а не только в компоненте реакции.
В вашем случае, однако, вам не нужно указывать ссылку в отдельном файле.
const Stack = createStackNavigator();
const navigationRef = React.createRef();
const App = () => {
return (
<Provider store={store}>
<NavigationContainer ref={navigationRef}>
<Header />
<Stack.Navigator>
<Stack.Screen
name="Home"
component={HomeScreen}
options={{
headerShown: false
}}
/>
<Stack.Screen
name="Login"
component={LoginScreen}
options={{
headerShown: false
}}
/>
</Stack.Navigator>
<Footer navigationRef={navigationRef}/>
</NavigationContainer>
</Provider>
);
};
А в <Footer/>
использовать navigationRef.current?.navigate(name, params)