gpt4 book ai didi

react-native - 如何在 React Navigation 5 中调用 toggleDrawer

转载 作者:行者123 更新时间:2023-12-04 10:07:58 26 4
gpt4 key购买 nike

我有一个使用手势工作的 React-Navigation 5 抽屉菜单,但我还想在标题的右侧添加一个图标来切换抽屉菜单。

我的 App.js 中有这样的导航设置:

import {NavigationContainer, DrawerActions} from '@react-navigation/native';
//....... other imports

const HomeStack = createStackNavigator();
const HomeStackScreens = () => (
<HomeStack.Navigator
screenOptions={{
headerStyle: {
backgroundColor: '#5C6BC0',
},
headerTintColor: '#fff',
headerRight: () => {
return (
<TouchableOpacity
onPress={() => DrawerActions.toggleDrawer()}>
<Icon name="bars" color="#FFF" size={18} />
</TouchableOpacity>
);
},
}}>
<HomeStack.Screen
name="Home"
component={HomeScreen}
options={{
header:({scene, previous, navigation}) => {
return (
<TouchableOpacity onPress={() => navigation.toggleDrawer()}>
<Icon name="bars" color="#FFF" size={18} />
</TouchableOpacity>
);
}
}}
/>
<HomeStack.Screen name="Login" component={Login} />
<HomeStack.Screen name="Register" component={Register} />
</HomeStack.Navigator>
);

const ProfileStack = createStackNavigator();
const ProfileStackScreens = () => (
<ProfileStack.Navigator>
<ProfileStack.Screen name="Profile" component={Profile} />
</ProfileStack.Navigator>
);

const SettingStack = createStackNavigator();
const SettingStackScreens = () => (
<SettingStack.Navigator>
<SettingStack.Screen name="Profile" component={Profile} />
</SettingStack.Navigator>
);

const Drawer = createDrawerNavigator();
const DrawerScreens = () => (
<Drawer.Navigator>
<Drawer.Screen name="Home" component={HomeStackScreens} />
<Drawer.Screen name="Profile" component={ProfileStackScreens} />
<Drawer.Screen name="Settings" component={SetttingStackScreens} />
</Drawer.Navigator>
);

class MyApp extends React.Component {
render() {
return (
<NavigationContainer>
<DrawerScreens />
</NavigationContainer>
);
}
}

export default MyApp;

我所有的其他屏幕都采用“导出默认类 ScreenName 扩展 React.Component”的形式。它们在 App.js 中导入以设置导航。初始屏幕是主页。图标正确显示在标题的右侧。直接调用“DrawerActions.toggleDrawer()”什么都不做。

我试过“this.props.navigation.toggleDrawer()”,它抛出错误,因为“this.props”未定义。

如何使用这样的导航设置调用 toggleDrawer() ?任何帮助真的很感激!

最佳答案

这是我提出的最终解决方案,它需要对我的原始代码进行最少的更改。关键是在 screenOptions 或 options 中接收“导航”,然后我可以在 screenOptions/options 的子项中调用导航方法。

<HomeStack.Navigator
screenOptions={({navigation}) => ({
headerStyle: {
backgroundColor: '#5C6BC0',
},
headerTintColor: '#fff',
headerRight: () => {
return (
<TouchableOpacity
style={{paddingRight: 8}}
onPress={() => navigation.toggleDrawer()}>
<Icon name="bars" color="#FFF" size={18} />
</TouchableOpacity>
);
},
})}>

关于react-native - 如何在 React Navigation 5 中调用 toggleDrawer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61473234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com