Current Behavior
I have a react-native application that use react-navigation
v5 for the routing.
Because of (1), my structure is drawerNavigator (a) > stackNavigator (b) > views (c)
.
When I try to call the useNavigation()
hook within my <DrawerContent />
, I have the following error:
Error: We couldn't find a navigation object. Is your component inside a navigator?
at useNavigation (bundle.js:8766)
Yes, I am not inside the stackNavigator
so the hook cannot be called
Expected Behavior
I expect to have navigation available within my <DrawerContent />
.
Your Environment
| software | version |
| ------------------------------ | ------- |
| iOS or Android | iOS, Android and web
| @react-navigation/native | 5.0.0-alpha.41
| @react-navigation/stack | 5.0.0-alpha.63
| @react-navigation/drawer | 5.0.0-alpha.41
| react-native-reanimated | 1.4.0
| react-native-gesture-handler | 1.5.3
| react-native-safe-area-context | 0.6.2
| react-native-screens | 2.0.0-alpha.32
| react-native | https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz
| expo | SDK36
| node | v13.5.0
| npm or yarn | 6.13.7
How can I use @react-navigation/stack
inside @react-navigation/drawer
or how should I build my drawer and app with them?
This is possible using https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html
Create RootNavigation
:
import { createRef } from 'react';
export const navigationRef = createRef();
export function navigate(name, params) {
navigationRef.current?.navigate(name, params);
}
export function goBack() {
navigationRef.current?.goBack();
}
In App.js
:
import { navigationRef } from './navigation/RootNavigation';
// ...
<NavigationContainer
ref={navigationRef}
>
{children}
</NavigationContainer>
Then import RootNavigation
from any source and you will not have to worry about the react tree.