1.首先可以参考官方例子:
https://reactnavigation.org/docs/en/drawer-based-navigation.html
这个是最简单的
这个是官方GitHub例子:
https://github.com/react-navigation/react-navigation/blob/master/examples/NavigationPlayground/js/Drawer.js
当然这个也是比较简单的,只是通过openDrawer()来启动
组件属性总结:
https://blog.csdn.net/u010418640/article/details/80737330
2.结合tab bar
如果结合tab bar则变复杂了很多,因为我点击drawer里面的item时要跳转到对应的tab上,就不能简单使用openDrawer()来启动了,而且简单drawer不会遮挡下面的tab bar.
好在发现了一个女程序员写的例子,解决了我这个问题:
先给出地址:https://readybytes.in/blog/how-to-integrate-tabs-navigation-drawer-navigation-and-stack-navigation-together-in-react-navigation-v2
gitLab:https://gitlab.com/readybytes/ReactNavigationExampleVersion2
3.我的代码分析:
export const DrawerStack = createDrawerNavigator({ HOME: { screen: TabNavigator, }, }, { initialRouteName: 'HOME', contentComponent: DrawerScreen, contentOptions: { activeTintColor: '#e91e63', }, style:{ backgroundColor: '#dfe04d', }, });
入口改为DrawerStack,里面装tabNavigation, tabNavigation里面再装StackNavigation
里面用到contentComponent: DrawerScreen,这里导入了DrawerScreen页面组件.也就是这个Drawer里面是一个自定义页面.还有调整背景在DrawerStack里面调,进入到DrawerScreen不能调整.
调用:
只需要在栈中的页面调用即可,openDrawer()后会使用DrawerScreen
<Button onPress={() => this.props.navigation.openDrawer()} title="Open drawer" />
我的DrawerScreen:先放效果图:
import React, {Component} from 'react'; import {NavigationActions} from 'react-navigation'; import PropTypes from 'prop-types'; import {ScrollView, Text, View, StyleSheet, Image, TouchableOpacity} from 'react-native'; import { DrawerActions } from 'react-navigation'; import styles from '../styles/index'; class DrawerScreen extends Component { navigateToScreen = (route) => () => { const navigateAction = NavigationActions.navigate({ routeName: route }); this.props.navigation.dispatch(navigateAction); this.props.navigation.dispatch(DrawerActions.closeDrawer()) } _cancleDrawer=function() { this.props.navigation.closeDrawer() } render () { return ( <View style={style.rootContainer}> <View style={style.head}> <Image source={require('../img/menu_header.png')} style={{resizeMode:'contain'}} /> </View> <View style={style.head_bar}> <TouchableOpacity onPress={() =>this._cancleDrawer()}> <Image source={require('../img/menu_cancle.png')} /> </TouchableOpacity> <Image source={require('../img/menu_inbox.png')} style={style.inboxStyle}/> <Text style={{marginTop:10, fontWeight:'bold'}}>INBOX</Text> </View> <ScrollView> <View> <TouchableOpacity onPress={this.navigateToScreen('Home')}> <View style={styles.menuItem}> <Image source={require('../img/menu_home.png')} style={style.listImage}/> <Text style={style.textStyle}> Home </Text> </View> </TouchableOpacity> <TouchableOpacity onPress={this.navigateToScreen('Schedule')}> <View style={styles.menuItem}> <Image source={require('../img/menu_schedule.png')} style={style.listImage}/> <Text style={style.textStyle}> SCHEDULE </Text> </View> </TouchableOpacity> <TouchableOpacity onPress={this.navigateToScreen('Booking')}> <View style={styles.menuItem}> <Image source={require('../img/menu_booking.png')} style={style.listImage}/> <Text style={style.textStyle}> BOOKING </Text> </View> </TouchableOpacity> <TouchableOpacity onPress={this.navigateToScreen('Member')}> <View style={styles.menuItem}> <Image source={require('../img/menu_member.png')} style={style.listImage}/> <Text style={style.textStyle}> MEMBER </Text> </View> </TouchableOpacity> <TouchableOpacity onPress={this.navigateToScreen('SettingScreen')}> <View style={styles.menuItem}> <Image source={require('../img/menu_setting.png')} style={style.listImage}/> <Text onPress={this.navigateToScreen('SettingScreen')} style={style.textStyle}> SETTING </Text> </View> </TouchableOpacity> </View> </ScrollView> </View> ); } } DrawerScreen.propTypes = { navigation: PropTypes.object }; const style = StyleSheet.create({ rootContainer:{ flex: 1, flexDirection: 'column' }, head:{ marginTop: 30, alignItems: 'center', justifyContent: 'center' }, head_bar:{ flexDirection: 'row', height:50 }, inboxStyle:{ marginLeft: 120, }, listStyle:{ flex: 1, marginTop:10 }, textStyle:{ marginTop:10, marginLeft: 10, fontWeight: 'bold', textAlign:'center', }, listImage:{ marginLeft:50 } }) export default DrawerScreen;
几个要点:
一.核心实现跳转到相应的tab:
navigateToScreen = (route) => () => { const navigateAction = NavigationActions.navigate({ routeName: route }); this.props.navigation.dispatch(navigateAction); this.props.navigation.dispatch(DrawerActions.closeDrawer()) }
二.onPress问题:
有两种:
如果没有返回,调用的是类,则要这样:
<TouchableOpacity onPress={this.navigateToScreen('Member')}>
第二种有返回的时候调用,一般调用的是function:
<TouchableOpacity onPress={() =>this._cancleDrawer()}>
(_fooFunc()表示私有)
类写在() =>中会发现跳转不了.function写在onPress={this._cancleDrawer()}会looping错误或者其他异常.因为onPress在render中会被渲染,onPress={this._cancleDrawer()}这样写会直接执行this的内容.
三.style UI:
flexDirection: 'column'
这个可以控制控件排列.
注意同级控件如果有一个加了flex,其他即使没有加flex,也会按照比例排开,所以要注意,不是什么情况都加flex的.
可以写一个单独的style,其他页面import进去后,可以直接style.xxx使用,简单直接,也可以复用.
相关推荐
在这个“reactnative项目提取的基础脚手架reactnavigation集成redux”中,我们主要讨论两个核心概念:React Navigation 和 Redux。 **React Navigation** React Navigation 是一个为React Native应用提供导航解决...
它提供了多种导航选项,如栈导航(StackNavigator)、抽屉导航(DrawerNavigator)和 Tab导航(TabNavigator)。在这个抽奖demo中,可能使用了栈导航来展示不同的页面,比如设置奖项页面、抽奖页面等,使得用户能够...
这包括栈导航(StackNavigator)、标签导航(TabNavigator)、抽屉导航(DrawerNavigator)等。 4. **第三方库集成**:商城项目可能需要集成支付系统(如Stripe或支付宝)、用户认证(如Firebase Auth或OAuth)、推...
React Navigation是React Native社区中最流行的导航库之一,它提供了一组灵活的组件和API来管理应用程序中的路由和导航。这个库支持多种导航模式,包括栈导航(StackNavigator)、抽屉导航(DrawerNavigator)、标签...
`react-native-navigation`支持栈导航(StackNavigator)、平板导航(TabNavigator)、抽屉导航(DrawerNavigator)以及自定义导航等。栈导航是最常见的,用于模拟iOS和Android中的视图堆栈;平板导航允许在一个...
首先,抽屉导航组件在React Native中可以通过第三方库如`react-navigation`中的`DrawerNavigator`来实现。`react-navigation`是一个强大的路由和导航解决方案,提供了多种导航方式,包括栈导航、抽屉导航和Tab导航。...
`react-navigation`支持栈导航(StackNavigator)、抽屉导航(DrawerNavigator)和tab导航(TabNavigator)等,使得在移动应用中切换视图变得简单易行。通过配置导航选项,开发者可以定制化各个屏幕的标题、过渡效果...
它可以轻松地实现页面间的跳转,支持多种导航类型,如堆栈导航(StackNavigator)、抽屉导航(DrawerNavigator)和Tab导航(TabNavigator)。React Navigation允许开发者自定义导航栏,同时提供了一套易于使用的API...
React Navigation是React Native中最常用的导航解决方案,它提供了多种导航模式,如栈导航(StackNavigator)、标签导航(TabNavigator)、抽屉导航(DrawerNavigator)等,以及自定义复杂的导航流程。这个库使得在...
总的来说,这个ReactNative小项目结合了DVA的状态管理、ReactNavigation的导航解决方案以及Ant Design的UI组件,为开发者提供了一个完整的混合移动应用开发环境。通过学习和理解这个项目,开发者可以深入掌握React...
本文将深入探讨“Node.js-用于ReactNative应用程序的原生导航库”,以及如何利用它来优化你的Android应用的导航条。 首先,我们来理解一下React Native。React Native是由Facebook开发的一个开源框架,允许开发者...
React Navigation提供了一个简单易用的API,支持多种导航模式,如堆栈导航(StackNavigator)、抽屉导航(DrawerNavigator)和 Tab 导航(TabNavigator)。在这个“尤文图斯队”的应用中,我们可能需要创建多个页面...
DrawerNavigator 是 react-navigation 库中的一种特殊的导航组件,可以实现抽屉导航菜单等功能。 (5)DrawerNavigator 扩展功能 DrawerNavigator 还可以扩展一些其他的功能,例如侧滑菜单、抽屉导航等。 (6)...
- 滑动抽屉导航效果,可使用`react-navigation`库中的`DrawerNavigator`组件实现。 - 自定义汉堡图标动画,可以通过`Animated`库实现图标旋转和透明度变化。 4. **挑战(challenge)**: - 挑战项目可能包括实现...
通过深入学习和实践“Navegation-ReactNative”项目,开发者可以掌握React Native导航的基本用法,理解导航组件的工作原理,并能够根据需求灵活地定制导航体验。这个项目对任何想要构建复杂React Native应用的人来说...
它支持多种导航类型,如栈导航(StackNavigator)、抽屉导航(DrawerNavigator)和tab导航(TabNavigator),帮助开发者构建具有复杂导航结构的应用。 至于"react-native-paper",这是一个UI库,它提供了Material ...
React Navigation支持多种导航模式,如堆栈导航(StackNavigator)、抽屉导航(DrawerNavigator)和平板导航(TabNavigator),可以轻松实现页面间跳转和动画效果。 通过学习并掌握这些技术,开发者可以构建出功能...
在"reactnative01_navigation"项目中,开发者可能已经实现了这些导航方式的示例,通过创建不同的组件和配置导航器,使得用户可以在不同的功能模块之间自由跳转。在学习这个项目时,你可以期待了解如何设置路由,如何...
它提供了多种导航解决方案,如栈导航(StackNavigator)、抽屉导航(DrawerNavigator)和Tab导航(TabNavigator),使得在移动应用中切换屏幕变得简单。 【API集成】UdaciFitness可能需要与外部API进行交互,例如...