react native 导航路由组件react-navigation的使用
navigation的几个难点和问题:
1.底部tab是否可以加上中间的大按钮? 如果加上,如何触发事件? js文件放哪?
2.navigation的登录注册页面。成功后应该不能返回刚刚的登录页面?清空页面栈?
3.登录成功跳转到大厅?意图页面?还是当前所在页?弹出model是不是可以解决所有问题?登录成功如何重刷当前页?
一、前言
在 React Native
中,官方已经推荐使用 react-navigation
来实现各个界面的跳转和不同板块的切换。 react-navigation
主要包括三个组件:
TabNavigator
切换组件 ,用来实现同一个页面上不同界面的切换,即tab选项卡StackNavigator
导航组件,用于实现各个页面之间的跳转,即页面跳转(通过stack栈记录)DrawerNavigator
抽屉组件,可以实现侧滑的抽屉效果
本次我们主要说说前两个,DrawerNavigator
笔者不曾使用
(一)、怎么使用navigation(入口和概览)
export default class Navigator extends Component {
render() {
return(
<Navigator />
)
}
}
const Navigator = StackNavigator(StackRouteConfigs, StackNavigatorConfigs)
上面的StackNavigator就是react-navigation
的导航组件:
StackNavigator
导航组件,用于实现各个页面之间的跳转,即页面跳转(通过stack栈记录)
那么它的两个参数 StackNavigator(StackRouteConfigs, StackNavigatorConfigs) 又是干啥的呢?
(二)、怎么使用StackNavigator
const StackRouteConfigs = {
MainTab: {
screen: MainTab,
navigationOptions: ({navigation}) => ({
//主页大厅的tab及其相关页面
}),
},
Datail: {
screen: DatailPage,
navigationOptions: ({navigation}) => ({
}),
},
}; const StackNavigatorConfig = {
initialRouteName: 'MainTab', //默认先加载的页面
navigationOptions: { //路由页面的配置选项,可定义头部内容、样式 },
mode: 'card', //页面跳转方式,card 表示原生系统默认的方式和 modal只针对iOS平台,模态跳转
headerMode: 'screen',页面跳转时,头部的动画模式,有 float 、 screen 、 none 三种
};
StackRouteConfigs参数表示各个页面路由配置,类似于android原生开发中的 AndroidManifest.xml
,它是让导航器知道需要导航的路由对应的页面。
StackNavigatorConfigs参数表示导航器的配置,包括导航器的初始页面、各个页面之间导航的动画、页面的配置选项等等:
initialRouteName - 导航器组件中初始显示页面的路由名称,如果不设置,则默认第一个路由页面为初始显示页面
initialRouteParams - 给初始路由的参数,在初始显示的页面中可以通过 this.props.navigation.state.params 来获取
navigationOptions - 路由页面的配置选项,它会被 RouteConfigs 参数中的 navigationOptions 的对应属性覆盖。
paths - 路由中设置的路径的覆盖映射配置
mode - 页面跳转方式,有 card 和 modal 两种,默认为 card :
card - 原生系统默认的的跳转
modal - 只针对iOS平台,模态跳转
headerMode - 页面跳转时,头部的动画模式,有 float 、 screen 、 none 三种:
float - 渐变,类似iOS的原生效果
screen - 标题与屏幕一起淡入淡出
none - 没有动画
cardStyle - 为各个页面设置统一的样式,比如背景色,字体大小等
transitionConfig - 配置页面跳转的动画,覆盖默认的动画效果
onTransitionStart - 页面跳转动画即将开始时调用
onTransitionEnd - 页面跳转动画一旦完成会马上调用
StackNavigatorConfigs配置选项
上面的MainTab表示大厅内的Tab内容
也就是:
TabNavigator
切换组件 ,用来实现同一个页面上不同界面的切换,即tab选项卡
它怎么使用呢???
(三)、怎么使用TabNavigator
const MainTab = TabNavigator(TabRouteConfigs, TabNavigatorConfigs);
const TabNavigatorConfigs = {
initialRouteName: 'Recommend',
tabBarComponent: TabBarBottom,
tabBarPosition: 'bottom',
lazy: true,
tabBarOptions: {
activeTintColor: 'red',
inactiveTintColor: '#999',
showIcon: true,
indicatorStyle: {height: 0},
style: {
backgroundColor: '#fff',
height: (height*0.08 < 65) ? 65 : height*0.08,
paddingVertical: (height*0.08 < 65) ? 5 : height*0.08/13,
},
labelStyle: {fontSize: 11},
}
};
const TabRouteConfigs = {
Attention: {
screen: AttentionScreen,
navigationOptions: ({navigation}) => ({
tabBarLabel: '关注',
tabBarIcon: ({focused, tintColor}) => (
<Image source={focused ? LocalImage.AttentionSelectedImage : LocalImage.AttentionImage} style={{width: '33%'}} resizeMode='contain'> </Image>
),
}),
},
Recommend: {
screen: RecommendScreen,
navigationOptions: ({navigation}) => ({
tabBarLabel: '推荐',
tabBarIcon: ({focused, tintColor}) => (
<Image source={focused ? LocalImage.RecommendSelectedImage : LocalImage.RecommendImage} style={{width: '33%'}} resizeMode='contain'> </Image>
),
}),
},
Library: {
screen: LibraryScreen,
navigationOptions: ({navigation}) => ({
tabBarLabel: '仓库',
tabBarIcon: ({focused, tintColor}) => (
<Image source={focused ? LocalImage.LibrarySelectedImage : LocalImage.LibraryImage} style={{width: '33%'}} resizeMode='contain'> </Image>
),
}),
},
Profile: {
screen: ProfileScreen,
navigationOptions: ({navigation}) => ({
tabBarLabel: '我的',
tabBarIcon: ({focused, tintColor}) => (
<Image source={focused ? LocalImage.ProfileSelectedImage : LocalImage.ProfileImage} style={{width: '33%'}} resizeMode='contain'> </Image>
),
}),
},
};
TabNavigator
切换组件 TabNavigatorConfigs 的配置
tabBarComponent - Tab选项卡组件,有 TabBarBottom 和 TabBarTop 两个值,在iOS中默认为 TabBarBottom ,在Android中默认为 TabBarTop 。
TabBarTop - 在页面的顶部
TabBarBottom - 在页面的底部
tabBarPosition - Tab选项卡的位置,有 top 或 bottom 两个值
swipeEnabled - 是否可以滑动切换Tab选项卡
animationEnabled - 点击Tab选项卡切换界面是否需要动画
lazy - 是否懒加载页面
initialRouteName - 初始显示的Tab对应的页面路由名称
order - 用路由名称数组来表示Tab选项卡的顺序,默认为路由配置顺序
paths - 路径配置
backBehavior - androd点击返回键时的处理,有 initialRoute 和 none 两个值
initailRoute - 返回初始界面
none - 退出
tabBarOptions - Tab配置属性,用在 TabBarTop 和 TabBarBottom 时有些属性不一致:
用于 TabBarTop 时:
activeTintColor - 选中的文字颜色
inactiveTintColor - 未选中的文字颜色
showIcon - 是否显示图标,默认显示
showLabel - 是否显示标签,默认显示
upperCaseLabel - 是否使用大写字母,默认使用
pressColor - android 5.0以上的MD风格波纹颜色
pressOpacity - android 5.0以下或者iOS按下的透明度
scrollEnabled - 是否可以滚动
tabStyle - 单个Tab的样式
indicatorStyle - 指示器的样式
labelStyle - 标签的样式
iconStyle - icon的样式
style - 整个TabBar的样式
用于 TabBarBottom 时:
activeTintColor - 选中Tab的文字颜色
activeBackgroundColor - 选中Tab的背景颜色
inactiveTintColor - 未选中Tab的的文字颜色
inactiveBackgroundColor - 未选中Tab的背景颜色
showLabel - 是否显示标题,默认显示
style - 整个TabBar的样式
labelStyle - 标签的样式
tabStyle - 单个Tab的样式
TabNavigatorConfigs配置
三、结语
暂时就这样
react native 导航路由组件react-navigation的使用的更多相关文章
- react native之组织组件
这些组件包括<TabView>,<NavigatorView>和<ListView>,他们实现了手机端最常用的交互和导航.你会发现这些组件在实际的项目中会非常有用. ...
- React Native之倒计时组件的实现(ios android)
React Native之倒计时组件的实现(ios android) 一,需求分析 1,app需实现类似于淘宝的活动倒计时,并在倒计时结束时,活动也结束. 2,实现订单倒计时,并在倒计时结束时,订单关 ...
- 利用 Create React Native App 快速创建 React Native 应用
本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...
- React Native知识6-NavigatorIOS组件
NavigatorIOS包装了UIKit的导航功能,可以使用左划功能来返回到上一界面.本组件并非由Facebook官方开发组维护.这一组件的开发完全由社区主导.如果纯js的方案能够满足你的需求的话,那 ...
- React Native导航器之react-navigation使用
在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigation.在讲react-navigation ...
- React Native填坑之旅--Navigation篇
React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...
- React Native常用第三方组件汇总--史上最全 之一
React Native 项目常用第三方组件汇总: react-native-animatable 动画 react-native-carousel 轮播 react-native-countdown ...
- React Native常用第三方组件汇总--史上最全[转]
本文出处: http://blog.csdn.net/chichengjunma/article/details/52920137 React Native 项目常用第三方组件汇总: react-na ...
- React Native知识2-Text组件
Text用于显示文本的React组件,并且它也支持嵌套.样式,以及触摸处理.在下面的例子里,嵌套的标题和正文文字会继承来自styles.baseText的fontFamily字体样式,不过标题上还附加 ...
随机推荐
- 201621123006 《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网 ...
- 6款实用的硬盘、SSD固态硬盘、U盘、储存卡磁盘性能测试工具
一.检测工具名称汇总 HDTune ATTO Disk Benchmark CrystalDiskMark AS SSD Benchmark Parkdale CrystalDiskInfo 二.各项 ...
- 51nod 算法马拉松4 D装盒子(网络流 / 二分图最优匹配)
装盒子 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 有n个长方形盒子,第i个长度为Li,宽度为Wi,我们需要把他们套放.注意一个盒子只可以套入长和宽分别不小于它的盒子,并且 ...
- test20181018 B君的第三题
题意 B 君的第三题(shenyang) 题目描述 客似云来,万里无云 B 君得到了一个数组\(\{a_1,a_2,\dots,a_n\}\). B 君想通过修改让数组中个每对数都互质. 每次使一个数 ...
- 蚂蚁金服 Service Mesh 实践探索
SOFAMesh是蚂蚁金服在ServiceMesh方向上的探索,下面是它高级技术专家敖小剑在QCon上海2018上的演讲. Service Mesh 是一个 基础设施层,用于处理服务间通讯.现代云原生 ...
- ccflow之相对路径
最近在使用集成CCFlow系统时,在项目中直接运行可以,但发布到项目时老是报找不到文件的错误,后跟踪发现 BP.WF.Dev2Interface.UI_Window_OneWork(this.FK_F ...
- 删除TFS项目上的文件
1.用vs(版本)开发人员命令提示输入命令进行删除 1.
- (转)powerdesigner 生成sql脚本使用的设置
本文转载自:http://blog.163.com/lizhihaoo@126/blog/static/103121661201036171115/ 1. 生成sql脚本的时候,提示"con ...
- [转]Spring 之 Log4j 的配置
- Hive 体系结构
1.Hive架构与基本组成 下面是Hive的架构图. 图1.1 Hive体系结构 Hive的体系结构可以分为以下几部分: (1)用户接口主要有三个:CLI,Client 和 W ...