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 相关文章推荐
JavaScript实现的内存数据库LokiJS介绍和入门实例
Nov 17 Javascript
JavaScript中数据结构与算法(三):链表
Jun 19 Javascript
基于javascript制作微博发布栏效果
Apr 04 Javascript
JavaScript作用域示例详解
Jul 07 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
Nov 25 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
jQuery Validate表单验证插件实现代码
Jun 08 jQuery
vue左侧菜单,树形图递归实现代码
Aug 24 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
Sep 11 Javascript
解决vue admin element noCache设置无效的问题
Nov 12 Javascript
JS数组及对象遍历方法代码汇总
Jun 16 Javascript
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编程开发“虚拟域名”系统
2006/10/09 PHP
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
一个基于jquery的图片切换效果
2010/07/06 Javascript
jQuery的学习步骤
2011/02/23 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
Python多项式回归的实现方法
2019/03/11 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Python新手学习装饰器
2020/06/04 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
办公室主任岗位职责
2013/11/08 职场文书
销售文员岗位职责
2013/11/29 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python