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编码之encodeURIComponent使用介绍(asp,php)
Mar 01 Javascript
jquery 倒计时效果实现秒杀思路
Sep 11 Javascript
JavaScript获取多个数组的交集简单实例
Nov 11 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
Mar 20 Javascript
javascript学习笔记(八)正则表达式
Oct 08 Javascript
jquery获取下拉框中的循环值
Feb 08 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
Oct 20 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
jQuery中$原理实例分析
Aug 13 jQuery
微信小程序实现联动选择器
Feb 15 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 Javascript
vue项目实现分页效果
Mar 24 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
php递归json类实例
2014/12/02 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
php数组分页实现方法
2016/04/30 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
使用python实现链表操作
2018/01/26 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
Python如何实现转换URL详解
2019/07/02 Python
pandas分区间,算频率的实例
2019/07/04 Python
python tkinter canvas使用实例
2019/11/04 Python
python用什么编辑器进行项目开发
2020/06/17 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
柏林通行证:Berlin Pass
2018/04/11 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
求职自荐信
2013/12/14 职场文书
工作疏忽检讨书
2014/01/25 职场文书
2014年计生标语
2014/06/23 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
死亡赔偿协议书
2015/01/28 职场文书
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS