react-navigation升级了, 看这个:

react-navigation 3.x版本的使用

一、问题背景

react-navigation是react-native官方推荐的,基于Javascript的可扩展且使用简单的导航,功能强大且完备

回顾一下,react-navigation包含以下功能来帮助我们创建导航器:

  • StackNavigator - 一次只渲染一个页面,并提供页面之间跳转的方法。 当打开一个新的页面时,它被放置在堆栈的顶部
  • TabNavigator - 渲染一个Tab选项卡,让用户可以在几个Tab页面之间切换
  • DrawerNavigator - 提供一个从屏幕左侧滑入的抽屉,类似bilibili和QQ的隐藏在左侧的内容栏功能

详细请看: react native 导航路由组件react-navigation的使用

通过这些博客教程,我们可以了解react-navigation的主要功能,如上述的三个功能块,这对于一些练手用的小APP来说,已经够了,
 
 
但是,对于稍微有点需求的应用来说,这点功能就不够用了,
问题一: 如何重置堆栈?
    比如,登陆成功后,点击返回,总不能让页面返回登录页吧!
 
问题二: 如何有选择的清除堆栈?
    比如,编辑内容发布成功后,跳转的已发布的内容页,这时候再点返回,你总不能返回刚刚的编辑页吧!
 
问题三:如何在多个StackNavigator之间,或StackNavigator父子间进行导航?
    有时候,我们需要的导航栈不止一个,那么他们之间如何进行页面跳转?
 
 
 二、分析
我们来看看react-navigation的基本使用:

(1)通过navigate函数实现界面之间跳转:

this.props.navigation.navigate('Mine');

参数为我们在StackNavigator注册界面组件时的名称。

同样也可以从当前页面返回到上一页:

// 返回上一页
this.props.navigation.goBack();

这是手动返回上一页,也可通过每个页面自带的返回图标返回

 

(2)跳转时传值:

this.props.navigation.navigate('Mine',{info: 'value'});

第一个参数同样为要跳转的界面组件名称,第二个参数为要传递的参数,info可以理解为key,后面即传递的参数(value值)。

同样,我们也可以在跳转后的页面去获取携带过来的值:

this.props.navigation.state.params.info}

通过state.params来获取传来的参数,后面为key值。此处为info。

 
(3)react-navigation自带标题栏的使用:
//会覆盖StackNavigator声明的页面的navigationOptions
static navigationOptions = ({navigation}) => ({
headerTintColor: '#fff',
headerStyle: {height: 65, backgroundColor: '#fb7299'},
headerTitle: navigation.state.params.title, //这是从上一级跳转携带的
headerTitleStyle: {
fontSize: 18,
color: '#fff',
alignSelf: 'center', //包括下面的属性主要是为了标题居中显示
flex: 1,
textAlign: 'center'
},
headerRight: <View>
          <TouchableOpacity onPress={() => {navigation.state.params.toOperate();}}> //此处必须通过添加参数的形式来调用方法
          <View><Text style={{color: '#fff', marginRight: 20}}>下一步</Text></View>
          </TouchableOpacity >
          </View>
})
1. navigation.state.params.title表示通过参数的形式来显示标题
2. 想要标题居中,alignSelf: 'center', flex: 1, textAlign: 'center'
3. navigation.state.params.toOperate();通过这种传参的方式,在标题栏中调用方法 该方法需要在componentDidMount()等方法中设置传递
componentDidMount() {
this.props.navigation.setParams({toOperate: () => {
alert('操作')
}})
}
三、结语
先这样咯!
 
 
 

react-native react-navigation的用法的更多相关文章

  1. React Navigation & React Native & React Native Navigation

    React Navigation & React Native & React Native Navigation React Navigation https://facebook. ...

  2. React Native中ref的用法(通过组件的ref属性,来获取真实的组件)

    ref是什么? ref是组件的特殊属性,组件被渲染后,指向组件的一个引用.可以通过组件的ref属性,来获取真实的组件.因为,组件并不是真正的DOM节点,而是存在于内存中的一种数据结构,称为虚拟的DOM ...

  3. 转载一篇React native的props的用法

    注:默认值如何设置 http://www.tuicool.com/articles/uMfYv2q

  4. React Native纯干货总结

    随着项目也渐渐到了尾声,之前的项目是mobile开发,采用的是React Native.为即将要开始做RN项目或者已经做过的小伙伴可以参考借鉴,也顺便自己做一下之前项目的总结. 文章比较长,可以选择自 ...

  5. 如何用 React Native 创建一个iOS APP?(三)

    前两部分,<如何用 React Native 创建一个iOS APP?>,<如何用 React Native 创建一个iOS APP (二)?>中,我们分别讲了用 React ...

  6. iOS 写给iOS开发者的React Native学习路线(转)

    我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...

  7. H5、React Native、Native应用对比分析

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博!iOS开发者交流QQ群: 446310206 "存在即合理".凡是存在的,都是合乎规律的.任何新 ...

  8. React Native控件之Listview

    ListView组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同. ListView更适于长列表数据,且元素个数可以增删.和ScrollView不同的是,ListView并不立即渲染 ...

  9. H5、React Native、Native性能区别选择

    “存在即合理”.凡是存在的,都是合乎规律的.任何新事物的产生总要的它的道理:任何新事物的发展总是有着取代旧事物的能力.React Native来的正是时候,一则是因为H5发展到一定程度的受限:二则是移 ...

  10. React Native笔记整理

    判断一个APP页面时原生还是H5:http://www.cnblogs.com/sonice-cinsy/p/5671324.html 写给移动开发者的React Native指南:http://bl ...

随机推荐

  1. CentOS7进程管理systemd详解

      概述: 系统启动过程中,当内核启动完成,后加载根文件系统,后就绪的一些用户空间的服务的管理工作,就交由init进行启动和管理,在CentOS6之前的init的管理方式都类似,相关的内容我们在之前的 ...

  2. OPENCV Linux安装

    https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html

  3. Jmeter-Interleave Controller(交替控制器)

    名称: 注释: ignore sub-controller blocks: If checked, the interleave controller will treat sub-controlle ...

  4. Mac OS下面安装mysql以及mysql常用命令

    使用brew安装mysql brew install mysql 安装成功后使用下面命令启动/关闭服务 brew services start mysql brew services stop mys ...

  5. 1106 1014 C语言文法定义与C程序的推导过程 冒泡程序语法树

  6. Python协程 Gevent Eventlet Greenlet

    https://zh.wikipedia.org/zh-cn/%E5%8D%8F%E7%A8%8B 协程可以理解为线程中的微线程,通过手动挂起函数的执行状态,在合适的时机再次激活继续运行,而不需要上下 ...

  7. c# 子线程如何通知主线程,个人总结

    我要实现的功能如下:程序中有2个线程,主线程和子线程,主线程中有一个变量:X主线程运行中激活子线程,子线程会做出计算改变 X 的值,主线程继续做其它的事,直到 X 的值发生改变时,才会响应,并在tex ...

  8. hdfs调优

    本文章来自 hackershell.cn,转载请标注出处 描述 这篇文章主要从一些配置设置相关方面去调优Hadoop集群的笔记,内容来自网上或一些实践经验 1.HDFS审计日志 HDFS审计日志是一个 ...

  9. wamp安装后无法正常启动(80端口被占用)

    关于wamp启动是80端口被占用的问题详解(win7系统下WAMP 80端口被Microsoft-HTTPAPI/2.0占用的解决办法) VS2010在更新了SP1后,会在开机时自动启动一个服务,占用 ...

  10. [C++ Primer] 第3章: 字符串, 向量和数组

    标准库类型string string初始化 string s2(s1); string s2 = s1; string s3("value"); string s3 = " ...