React Native中导航组件react-navigation跨tab路由处理详解


Posted in Javascript onOctober 31, 2017

前言

大家应该都有所体会,我们在一般应用都有跨tab跳转的需求, 这就需要特别处理下路由,所以 下面是使用react-navigation作为路由组件的一种方式.

具体情境是: app分三大模块Home主页, Bill账单和Me我的, 对应三个tab. 现在需求是 Home push HomeTwo, HomeTwo push BillTwo, BillTwo 返回到 Bill账单首页.

方法如下:

首先选择路由结构, 选择使用最外层是StackNavigator, 然后包含3个TabNavigator和其他组件.

const Components = {
 HomeTwo: { screen: HomeTwo, path:'app/HomeTwo' },
 HomeThree: { screen: HomeThree, path:'app/HomeThree' },
 BillTwo: { screen: BillTwo, path:'app/BillTwo' },
 BillThree: { screen: BillThree, path:'app/BillThree' },
}

const Tabs = TabNavigator({
 Home: {
  screen: Home,
  path:'app/home',
  navigationOptions: { 
  tabBar: {
   label: '首页',
   icon: ({tintColor}) => (<Image source={require('./images/home.png')} style={[{tintColor: tintColor},styles.icon]}/>),
  },
  }
 },
 Bill: {
  screen: Bill,
  path:'app/bill',
  navigationOptions: {
  tabBar: {
   label: '账单',
   icon: ({tintColor}) => (<Image source={require('./images/bill.png')} style={[{tintColor: tintColor},styles.icon]}/>),
  },
  }
 },
 Me: {
  screen: Me,
  path:'app/me',
  navigationOptions: {
  tabBar: {
   label: '我',
   icon: ({tintColor}) => (<Image source={require('./images/me.png')} style={[{tintColor: tintColor},styles.icon]}/>),
  },
  }
 }
 }, {
 tabBarPosition: 'bottom', 
 swipeEnabled: false,
 animationEnabled: false, 
 lazyLoad: false, 
 backBehavior: 'none', 
 tabBarOptions: {
  activeTintColor: '#ff8500', 
  inactiveTintColor: '#999',
  showIcon: true, 
  indicatorStyle: {
  height: 0 
  },
  style: {
  backgroundColor: '#fff', 
  },
  labelStyle: {
  fontSize: 10, 
  },
 },
 });


 const Navs = StackNavigator({
 Home: { screen: Tabs, path:'app/Home' },
 Bill: { screen: Tabs, path:'app/Bill' },
 Me: { screen: Tabs, path:'app/Me' },
 ...Components
 }, {
 initialRouteName: 'Home', 
 navigationOptions: { 
  header: { 
  style: {
   backgroundColor: '#fff'
  },
  titleStyle: {
   color: 'green'
  }
  },
  cardStack: { 
  gesturesEnabled: true
  }
 },
 mode: 'card', 
 headerMode: 'screen'
 });

在HomeTwo里使用react-navigation自带的reset action就可以重置路由信息了:

// push BillTwo
this.props.navigation.dispatch(resetAction);

// 使用reset action重置路由
const resetAction = NavigationActions.reset({
 index: 1, // 注意不要越界
 actions: [ // 栈里的路由信息会从 Home->HomeTwo 变成了 Bill->BillTwo
 NavigationActions.navigate({ routeName: 'Bill'}),
 NavigationActions.navigate({ routeName: 'BillTwo'})
 ]
});

从HomeTwo push 到 BillTwo页面后, 点击BillTwo的左上角导航按钮返回就能返回到Bill账单首页了.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
可以文本显示的公告栏的js代码
Mar 11 Javascript
js调试系列 断点与动态调试[基础篇]
Jun 18 Javascript
jquery幻灯片插件bxslider样式改进实例
Oct 15 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
详解vue-cli与webpack结合如何处理静态资源
Sep 19 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
微信小程序实现星级评分和展示
Jul 05 Javascript
关于Vue中axios的封装实例详解
Oct 20 Javascript
js HTML DOM EventListener功能与用法实例分析
Apr 27 Javascript
基于JavaScript实现表格隔行换色
May 08 Javascript
HTML+VUE分页实现炫酷物联网大屏功能
May 27 Vue.js
ES6解构赋值实例详解
Oct 31 #Javascript
js 获取json数组里面数组的长度实例
Oct 31 #Javascript
jQuery读取本地的json文件(实例讲解)
Oct 31 #jQuery
canvas绘制爱心的几种方法总结(推荐)
Oct 31 #Javascript
ES6扩展运算符用法实例分析
Oct 31 #Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
Oct 31 #Javascript
JavaScript实现QQ列表展开收缩扩展功能
Oct 30 #Javascript
You might like
简单的移动设备检测PHP脚本代码
2011/02/19 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
python list转矩阵的实例讲解
2018/08/04 Python
Python实现八皇后问题示例代码
2018/12/09 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
员工工作表现自我评价
2015/03/06 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
Docker官方工具docker-registry案例演示
2022/04/13 Servers