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』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
May 31 Javascript
利用jquery实现下拉框的禁用与启用
Dec 07 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
Jan 29 Javascript
简单谈谈React中的路由系统
Jul 25 Javascript
最基础的vue.js双向绑定操作
Aug 23 Javascript
Vue项目添加动态浏览器头部title的方法
Jul 11 Javascript
微信小程序分包加载代码实现方法详解
Sep 23 Javascript
JS遍历树层级关系实现原理解析
Aug 31 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
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
jquery实现表格本地排序的方法
2015/03/11 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
JS实现图片手风琴效果
2020/04/17 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
小程序实现投票进度条
2019/11/20 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
初中三好学生自我鉴定
2014/04/07 职场文书
工作总结与自我评价
2014/09/18 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python