React Native - 在 AppNavigator 之外访问抽屉导航
React Native - Accessing drawer navigation outside of AppNavigator
App.js
<Store>
<Navbar />
<AppNavigator ref={navigatorRef => {
NavigationService.setTopLevelNavigator(navigatorRef);
}} />
</Store>
我希望能够访问
props.navigation.openDrawer();
来自导航栏,但我得到
undefined is not an object (evaluating 'props.navigation.openDrawer')
onPress
Navbar.js:70:29
etc..
如何让 NavBar 访问抽屉?
我想您正在关注 Navigating without the navigation prop(如果您没有关注,那么您应该关注您的情况)。然后在NavigationService.js
中添加openDrawer方法
// 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
};
然后使用
而不是 props.navigation.openDrawer()
NavigationService.openDrawer()
别忘了分别导入
这是我在没有导航道具的情况下使用 openDrawer 的方式:
在您的 App.js(或其他路由器)中
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/ 在你的导航容器中添加这个 ref
<NavigationContainer ref={navigationRef}>
5/ 在创建 openDrawer 的地方调用你的函数:
<TouchableOpacity onPress={() => openDrawer()}>
<Image
source={tab}
style={{
width: 20,
height: 20,
}}
/>
</TouchableOpacity>
App.js
<Store>
<Navbar />
<AppNavigator ref={navigatorRef => {
NavigationService.setTopLevelNavigator(navigatorRef);
}} />
</Store>
我希望能够访问
props.navigation.openDrawer();
来自导航栏,但我得到
undefined is not an object (evaluating 'props.navigation.openDrawer')
onPress
Navbar.js:70:29
etc..
如何让 NavBar 访问抽屉?
我想您正在关注 Navigating without the navigation prop(如果您没有关注,那么您应该关注您的情况)。然后在NavigationService.js
中添加openDrawer方法
// 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
};
然后使用
而不是props.navigation.openDrawer()
NavigationService.openDrawer()
别忘了分别导入
这是我在没有导航道具的情况下使用 openDrawer 的方式:
在您的 App.js(或其他路由器)中
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/ 在你的导航容器中添加这个 ref
<NavigationContainer ref={navigationRef}>
5/ 在创建 openDrawer 的地方调用你的函数:
<TouchableOpacity onPress={() => openDrawer()}>
<Image
source={tab}
style={{
width: 20,
height: 20,
}}
/>
</TouchableOpacity>