App.js
<Store>
<Navbar />
<AppNavigator ref={navigatorRef => {
NavigationService.setTopLevelNavigator(navigatorRef);
}} />
</Store>
I wanna be able to access
props.navigation.openDrawer();
from navbar but I get
undefined is not an object (evaluating 'props.navigation.openDrawer')
onPress
Navbar.js:70:29
etc..
How can I allow NavBar to access the drawer?
I suppose you are following Navigating without the navigation prop (if you don't then you should in your case). Then in NavigationService.js add openDrawer method
// NavigationService.js
import { DrawerActions } from 'react-navigation-drawer';
...
// add this function
function openDrawer(routeName, params) {
_navigator.dispatch(DrawerActions.openDrawer());
}
export default {
...
// and export it
openDrawer
};
then instead of props.navigation.openDrawer(), use
NavigationService.openDrawer()
don't forget to make respective imports
this is how i used openDrawer without navigation prop:
in your App.js (or other router)
1/
import { DrawerActions } from '@react-navigation/native';
2/
export const navigationRef = React.createRef();
3/
export function openDrawer(routeName, params) {
navigationRef.current.dispatch(DrawerActions.openDrawer());
}
4/ inside your navigation container add this ref
<NavigationContainer ref={navigationRef}>
5/ call your function somewhere where openDrawer is created:
<TouchableOpacity onPress={() => openDrawer()}>
<Image
source={tab}
style={{
width: 20,
height: 20,
}}
/>
</TouchableOpacity>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With