一个易于使用的导航解决方案,可用于React和React Native项目https://reactnavigation.org
如何以编程方式在react-Native v=0.74中导航页面?
我是 React Native 新手,我在 React Native 中路由页面时遇到问题 React Native中路由页面的解决方案 在登录页面中,如果用户是新用户,则用户单击了重定向您的注册按钮...
使带有参数的navigation.navigate()就像反应导航抽屉中的navigation.goBack()一样
我正在使用反应导航抽屉(v6.x)并且我有以下导航历史记录。 屏幕A -> 屏幕B -> 屏幕C 然而,当从 ScreenC 返回到 ScreenB 时,我需要传递一些参数...
useNavigate() 只能在 <Router> 组件的上下文中使用。 (在不同的文件上)
我一直在做一个需要登录的项目。我一直在关注在搜索信息时发现的本教程(这是本教程的第一种方法)。 然而,正如我想创造...
React Native 导航:状态更改后 Stack.Navigator 未更新
我在 React Native 应用程序中遇到导航问题。这是我的 RootNavigator 组件的相关部分: const Stack = createStackNavigator(); 导出功能RootNaviga...
React Navigation 的嵌套导航器的 CompositeScreenProps 出现类型错误
我正在尝试按照本指南使用 TypeScript 和 React Navigation 进行类型检查,但每当我尝试导航到另一个选项卡中的屏幕时,我都会收到此错误: 类型为“[AppRoutes.
使用 Turbo 的 React Native 示例的博览会开始发布问题
我有一个 monorepo 反应本机应用程序示例“turbo-repo”,我使用以下方法创建: npx create-turbo -e with-react-native-web 我使用以下命令运行构建: npx 涡轮增压构建 然后我
如何使用 createBottomTabNavigator 对 React Navigation 过渡进行动画处理?
我花了最后一天的时间试图找出如何使用反应导航实现简单的淡入淡出屏幕转换,但我找不到一种方法让它与底部选项卡导航器一起使用。有人可以吗...
在 React 导航中,当单击后退按钮时,状态值不会被清除,因为没有调用构造函数。例如,假设我有 2 个屏幕 - A 和 B,如果我从 A 切换到 B,然后再切换回来...
无法解析模块@react-navigation/native 在项目内或这些目录中找不到@react-navigation/native:
错误: 错误:无法从 D: 解析模块 @react-navigation/native eact-native-practice pp1\App.tsx:在项目或这些目录中找不到@react-navigation/native...
我开始使用 React Native 并尝试使用 expo 路由将 setState 函数从一个屏幕传递到另一个屏幕: ... const [消息,setMessage] = useState(null); ... 我开始使用 React Native 并尝试使用 expo 路由将 setState 函数从一个屏幕传递到另一个屏幕: ... const [message, setMessage] = useState(null); ... <Pressable onPress={() => router.push({ pathname: "/page2", params: {message: message, method: setMessage}, }) } ... 但是当我去使用第2页中的功能时,我收到错误消息: 方法不是函数(它是'函数绑定dispatchSetState(a0) { [字节码]}') 如何在 React Native 中在屏幕之间传递函数? 或者,如何从堆栈中更下方的屏幕更改主屏幕中的状态。 我尝试将函数像变量一样传递给 params 对象,但出现错误 我认为这不是做你想做的事情的更好方法。 更好的方法是将 PARAMS 作为对象,并让 /page2 具有接收 PARAMS 的函数。 <Pressable onPress={() => router.push({ pathname: "/page2", params: {message: message}, }) } 然后在/page2这样离开 const [message, setMessage] = useState(null); React.useEffect(() => { if (route.params?.message) { setMessage(route.params?.message) } }, [route.params?.message]); return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text style={{ margin: 10 }}>Message: {message}</Text> </View>); 然后使用 message 变量来做你想做的事! 参考:https://reactnavigation.org/docs/params/#what-should-be-in-params 希望这有帮助!
在调用 createMaterialTopTabNavigator 的键盘上隐藏选项卡栏作为底部选项卡导航器实现
大家好,我使用 React Navigation 5 createMaterialTopTabNavigator 进行底部导航设置,因为我也需要 Material Top Navigator 提供的滑动过渡,但与
我想在 RN 应用程序的抽屉式导航底部添加注销按钮。 我尝试按以下方式使用 contentComponent: const DrawerWithLogoutButton = (道具) => ( 我想在 RN 应用程序的抽屉式导航底部添加注销按钮。 我正在尝试按以下方式使用contentComponent: const DrawerWithLogoutButton = (props) => ( <ScrollView> <SafeAreaView style={styles.container} forceInset={{ top: 'always', horizontal: 'never' }}> <DrawerItems {...props} /> </SafeAreaView> <Button style={styles.logoutButton} title="Logout" onPress={() => props.navigation.navigate('Login') }/> </ScrollView> ); export default Home = createDrawerNavigator({ // screens }, { // other settings contentComponent: DrawerWithLogoutButton, }); const styles = StyleSheet.create({ container: { flex: 1, flexDirection: 'column', }, logoutButton: { backgroundColor: 'red', position: 'absolute', bottom: 0 } }); 结果中,菜单底部有“注销”按钮。但我希望它位于抽屉面板的底部 我还希望“注销”按钮看起来像其他菜单项并有一个图标 有没有一种方法可以创建带有菜单项的抽屉导航器,该菜单项没有屏幕,但只是像我这样的注销之类的操作? 我能够通过将 justifyContent: 'space-between' 添加到 ScrollView 容器来对齐抽屉菜单底部的注销。你可以在图中看到结果 结果源代码如下所示: const DrawerWithLogoutButton = (props) => ( <ScrollView contentContainerStyle={{flex: 1, flexDirection: 'column', justifyContent: 'space-between' }}> <SafeAreaView forceInset={{ top: 'always', horizontal: 'never' }}> <DrawerItems {...props} /> </SafeAreaView> <TouchableOpacity> <View style={styles.item}> <View style={styles.iconContainer}> <Image source={require('./img/logout.png')} style={styles.icon}></Image> </View> <Text style={styles.label}>Logout</Text> </View> </TouchableOpacity> </ScrollView> ); const styles = StyleSheet.create({ item: { flexDirection: 'row', alignItems: 'center', }, label: { margin: 16, fontWeight: 'bold', color: 'rgba(0, 0, 0, .87)', }, iconContainer: { marginHorizontal: 16, width: 24, alignItems: 'center', }, icon: { width: 24, height: 24, } }); React Navigation 文档建议使用自定义内容抽屉功能包装抽屉导航。这就是我们所做的,为我们的抽屉提供一个注销按钮,同时也保留所有 Drawer.Screen 的位置。 在下面的代码中,我们创建一个 CustomDrawerContent,其中包含 DrawerItem 作为我们的 logout 按钮。该函数通过其属性 Drawer.Navigator 包装 drawerContent。我们最后的抽屉看起来像: 首页(抽屉.屏幕) 编辑个人资料(抽屉.屏幕) 着陆(抽屉.屏幕) 注销(抽屉项目) const Drawer = createDrawerNavigator(); function CustomDrawerContent(props) { return ( <DrawerContentScrollView {...props}> <DrawerItemList {...props} /> <DrawerItem label={() => <Text style={{ color: 'white' }}>Logout</Text>} style={{backgroundColor: 'red'}} onPress={() => alert('Logged out')} /> </DrawerContentScrollView> ); } function App(props) { return ( <Provider store={store}> <View style={styles.container}> <StatusBar translucent={true} /> <NavigationContainer> <Drawer.Navigator drawerContent={props => <CustomDrawerContent {...props} />}> <Drawer.Screen name='Home' component={Home} /> <Drawer.Screen name='Edit Profile' component={EditProfile} /> <Drawer.Screen name='Landing' component={Landing} /> </Drawer.Navigator> </NavigationContainer> </View> </Provider> ) } 与 William Griffins 的答案类似,只是他们的答案最终没有出现在抽屉底部的注销按钮。为了使注销位于底部,我将 DrawerContentScrollView 放入 SafeAreaView 中,然后在 DrawerContentScrollView 下方放置一个包含 DrawerItem(即注销按钮)的常规视图。 function CustomDrawerContent(props) { return ( <SafeAreaView style={{flex: 1}} forceInset={{top: "always", horizontal: "never"}}> <DrawerContentScrollView {...props}> <DrawerItemList {...props} /> </DrawerContentScrollView> <View> <DrawerItem label={"Logout"} style={styles.logoutDrawerItem} onPress={() => console.log('Logout pressed!')} /> </View> </SafeAreaView> ); } function App(props) { return ( <Provider store={store}> <View style={styles.container}> <StatusBar translucent={true} /> <NavigationContainer> <Drawer.Navigator drawerContent={props => <CustomDrawerContent {...props} />}> <Drawer.Screen name='Home' component={Home} /> <Drawer.Screen name='Edit Profile' component={EditProfile} /> <Drawer.Screen name='Landing' component={Landing} /> </Drawer.Navigator> </NavigationContainer> </View> </Provider> ) } const styles = StyleSheet.create({ logoutDrawerItem: { borderRadius: 5, }, }); 您放置在 DrawerContentScrollView 下方的任何项目都将放置在抽屉的底部。 请注意,我在注销 DrawerItem 上将 borderRadius 设置为 5,以便它与常规抽屉项目的边框半径紧密匹配。 您可以像下面的代码一样设置position:'absolute'和buttom:0: <TouchableOpacity onPress={() => {this.logout()}} style={{ bottom: 0, position: 'absolute', width: '100%' }}> <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', flexDirection:'row', alignItems: 'center' }}> <Icon name="md-log-out" style={{marginRight: 10, color: '#444'}} size={20}/> <Text style={{color: '#444'}}>Logout</Text> </View> </TouchableOpacity> 您可以更改样式,使其像其他按钮一样。我希望这能帮助你... 接受的答案并没有直接适合我。我必须做一些修改,但总的来说,秘密确实是使用justifyContent: 'space-between'。 import {View} from 'react-native'; import { createDrawerNavigator, DrawerContentScrollView, DrawerItem, DrawerItemList, DrawerContentComponentProps, } from '@react-navigation/drawer'; const Drawer = createDrawerNavigator(); function CustomDrawerContent(props: DrawerContentComponentProps) { return ( <DrawerContentScrollView {...props} contentContainerStyle={{flex: 1, justifyContent: 'space-between'}}> <View style={{justifyContent: 'flex-start'}}> <DrawerItemList {...props} /> </View> <DrawerItem label="Logout" onPress={() => console.log('Logged out')} /> </DrawerContentScrollView> ); } . . . <Drawer.Navigator initialRouteName="HomeScreen" drawerContent={(props) => <CustomDrawerContent {...props} />} drawerContentOptions={{ activeTintColor: color.primaryDark, itemStyle: { backgroundColor: 'transperant', borderColor: color.primaryDark, borderBottomWidth: 1, opacity: 0.8, }, }} drawerStyle={styles.drawer}> <Drawer.Screen name="Home" component={HomeScreen} /> <Drawer.Screen name="Notifications" component={NotificationsScreen} /> </Drawer.Navigator> 版本:6.x 解决方案: 将 flex: 1 添加到抽屉内容容器样式,然后将 marginTop: "auto" 添加到最后一项。不需要抽屉内容。 <Drawer screenOptions={{ drawerContentContainerStyle: { flex: 1, }, }} > <Drawer.Screen name="index" options={{ drawerLabel: "Home", }} /> <Drawer.Screen name="logout" options={{ drawerLabel: "Logout", drawerItemStyle: { marginTop: "auto", }, }} /> </Drawer>;
我正在尝试将react-native用于网络应用程序。我想创建一个到不同屏幕的简单链接,但使用 url 而不是元素。 我设法让它与两个恼人的空洞一起工作: 的...
我想要一个自定义选项卡视图,其中中间选项卡在下面缩进以实现完整的波浪形状,我尝试使用图像背景作为底部选项卡,但我还没有走得太远
React 导航:向 Stack.Screen 元素添加填充
我想在屏幕上的 stack.screen 元素之间添加填充,以便更容易选择它们。可以以某种方式添加填充吗?我的代码 sinpet 如下 ... ...
这张图片显示了我的问题 我不知道为什么,但这段文字看起来像这样,我不知道哪个组件位于标签上方等等...... 从“反应”导入反应; 进口 {
我正在尝试将 React Navigation 6.x 包含到带有 Redux 的 React Native 项目中,因此需要能够从外部组件访问导航器。 我正在遵循本指南(导航
我正常从屏幕 A 导航到屏幕 B 我想让屏幕 B 作为应用程序的根/导航应该忽略屏幕 A 并将屏幕 B 作为根处理 所以在屏幕 B 中,当使用...
“Element”不可分配给类型“ScreenComponentType<ParamListBase, "Home">” |未定义 - React Native 上的 React 导航
我正在尝试在 React Native 应用程序上使用 React Navigation 创建我的堆栈导航器。 我有我的 HomeTab 组件,就是这样的代码: 从“反应”导入反应; 导入{createNativeStackNavi...
我正在使用 React Native 和 React Navigation。我想根据 isInitial 的值有条件地渲染 headerLeft 组件。如果 isInitial 为 true,我希望 headerLeft 呈现如图所示...