前言

Navigator主要用于ReactNative中的跳转,中文文档:

http://reactnative.cn/docs/0.39/using-navigators.html

懒得打字介绍更多了,将上面的官网文档看一遍之后应该有个大概了解了。

  • initialRoute 配置初始路由参数;
  • configureScene 用于配置场景动画;
  • renderScene 指示具体如何渲染一个场景;
  • 一个可选的导航栏组件,个人感觉这个不太好用,一般不用它;
  • {...route.passProps}用于批量传递参数到this.props

简单示例

下面写了一个最简单的页面跳转与返回的例子test-navigator-no-bar.js

效果图:

  1. import React, { Component } from 'react';
  2. import { AppRegistry, Text, Image, View, StyleSheet, Navigator, TouchableOpacity } from 'react-native';
  3. // 一个简单的navigator使用示例
  4. export default class TestNavigator extends Component
  5. {
  6. configureScene(route, routeStack)
  7. {
  8. return Navigator.SceneConfigs.PushFromRight;
  9. }
  10. render()
  11. {
  12. return (
  13. <Navigator
  14. style={{flex:1}}
  15. initialRoute={{component: FirstPage}}
  16. configureScene={this.configureScene}
  17. renderScene={(route, navigator) => <route.component navigator={navigator} {...route.passProps} />} />
  18. );
  19. }
  20. }
  21. // 首页
  22. class FirstPage extends Component
  23. {
  24. render()
  25. {
  26. return (
  27. <View>
  28. <TouchableOpacity onPress={() => this.props.navigator.push({component: SecondPage})}>
  29. <Text style={{fontSize:28}}>点击跳转到二级页面</Text>
  30. </TouchableOpacity>
  31. </View>
  32. );
  33. }
  34. }
  35. // 二级页面
  36. class SecondPage extends Component
  37. {
  38. render()
  39. {
  40. return (
  41. <View>
  42. <TouchableOpacity onPress={()=>this.props.navigator.pop()}>
  43. <Text style={{color: 'red', fontSize: 28}}>点击返回首页</Text>
  44. </TouchableOpacity>
  45. </View>
  46. );
  47. }
  48. }

带导航的示例

效果图:

完整代码如下(test-navigator-with-bar.js):

  1. import React, { Component } from 'react';
  2. import { AppRegistry, Text, Image, View, StyleSheet, TextInput, ScrollView, ListView, Navigator, TouchableOpacity } from 'react-native';
  3. // 一个简单的navigator使用示例
  4. export default class TestNavigator extends Component
  5. {
  6. configureScene(route, routeStack)
  7. {
  8. if (route.type == 'Modal') {
  9. return Navigator.SceneConfigs.FloatFromBottom;
  10. }
  11. return Navigator.SceneConfigs.PushFromRight;
  12. }
  13. render()
  14. {
  15. return (
  16. <Navigator
  17. style={{flex:1}}
  18. initialRoute={{component: FirstPage, passProps: {title: '首页', rightText: '菜单'}}}
  19. configureScene={this.configureScene}
  20. renderScene={(route, navigator) => <route.component route={route} navigator={navigator} {...route.passProps} />}
  21. navigationBar={
  22. <Navigator.NavigationBar
  23. style={styles.navContainer}
  24. routeMapper={NavigationBarRouteMapper}/>} />
  25. );
  26. }
  27. }
  28. // 首页
  29. class FirstPage extends Component
  30. {
  31. /**
  32. * 跳转
  33. */
  34. gotoPage(component, title)
  35. {
  36. this.props.navigator.push(
  37. {
  38. component: component,
  39. passProps: {
  40. title: '二级页面',
  41. lastPageTitle: this.props.title
  42. }
  43. })
  44. }
  45. render()
  46. {
  47. return (
  48. <View style={{paddingTop: 80}}>
  49. <TouchableOpacity onPress={() => this.gotoPage(SecondPage, '二级页面')}>
  50. <Text style={{fontSize:28, padding: 10}}>点击跳转到二级页面</Text>
  51. </TouchableOpacity>
  52. <Text style={{padding: 10, fontSize: 20}}>这是首页,这是首页,这是首页,这是首页,这是首页,这是首页,这是首页,这是首页,这是首页,这是首页,这是首页</Text>
  53. </View>
  54. );
  55. }
  56. }
  57. // 二级页面
  58. class SecondPage extends Component
  59. {
  60. render()
  61. {
  62. return (
  63. <View style={{paddingTop: 80}}>
  64. <TouchableOpacity
  65. style={styles.button}
  66. onPress={()=>this.props.navigator.pop()}>
  67. <Text style={styles.buttonText}>
  68. 点击返回{this.props.lastPageTitle}
  69. </Text>
  70. </TouchableOpacity>
  71. </View>
  72. );
  73. }
  74. }
  75. // 导航栏的Mapper
  76. var NavigationBarRouteMapper =
  77. {
  78. // 左键
  79. LeftButton(route, navigator, index, navState)
  80. {
  81. if (index <= 0) return null;
  82. return (
  83. <TouchableOpacity
  84. underlayColor='transparent'
  85. onPress={() => {if (index > 0) {navigator.pop()}}}>
  86. <Text style={styles.leftNavButtonText}>
  87. 返回
  88. </Text>
  89. </TouchableOpacity>
  90. );
  91. },
  92. // 右键
  93. RightButton(route, navigator, index, navState)
  94. {
  95. if(!route.passProps.rightText) return null;
  96. return (
  97. <TouchableOpacity
  98. onPress={() => alert('测试菜单')}>
  99. <Text style={styles.rightNavButtonText}>
  100. {route.passProps.rightText}
  101. </Text>
  102. </TouchableOpacity>
  103. );
  104. },
  105. // 标题
  106. Title(route, navigator, index, navState)
  107. {
  108. return (
  109. <Text style={styles.title}>
  110. {route.passProps.title || '默认标题'}
  111. </Text>
  112. );
  113. }
  114. };
  115. var styles = StyleSheet.create({
  116. // 页面框架
  117. container: {
  118. flex: 4,
  119. marginTop: 100,
  120. flexDirection: 'column'
  121. },
  122. // 导航栏
  123. navContainer: {
  124. backgroundColor: '#41ABF7',
  125. paddingTop: 12,
  126. paddingBottom: 10,
  127. flex: 1
  128. },
  129. // 导航栏文字
  130. headText: {
  131. color: '#ffffff',
  132. fontSize: 22
  133. },
  134. // 按钮
  135. button: {
  136. height: 120,
  137. marginTop: 10,
  138. justifyContent: 'center', // 内容居中显示
  139. backgroundColor: '#ff1049',
  140. alignItems: 'center'
  141. },
  142. // 按钮文字
  143. buttonText: {
  144. fontSize: 18,
  145. color: '#ffffff'
  146. },
  147. // 左面导航按钮
  148. leftNavButtonText: {
  149. color: '#ffffff',
  150. fontSize: 18,
  151. marginLeft: 13,
  152. marginTop: 12,
  153. flex: 1
  154. },
  155. // 右面导航按钮
  156. rightNavButtonText: {
  157. color: '#ffffff',
  158. fontSize: 18,
  159. marginRight: 13,
  160. marginTop: 12,
  161. flex: 1
  162. },
  163. // 标题
  164. title: {
  165. fontSize: 18,
  166. color: '#fff',
  167. textAlign: 'center',
  168. alignItems: 'center',
  169. justifyContent: 'center',
  170. fontWeight: 'bold',
  171. marginTop: 12
  172. }
  173. });

关于动画

所有可用的场景动画:

  1. console.log(Navigator.SceneConfigs);

其它

判断一个页面是否能够继续返回:

  1. var navigator = this.props.navigator;
  2. if(navigator.getCurrentRoutes().length > 1)
  3. {
  4. navigator.pop();
  5. }
  6. else
  7. {
  8. alert('不能再返回了!');
  9. }

ReactNative学习笔记(七)Navigator的使用的更多相关文章

  1. react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置

    参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup. ...

  2. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  3. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  4. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  5. python3.4学习笔记(七) 学习网站博客推荐

    python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...

  6. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

  7. iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】

    iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...

  8. 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

  9. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

  10. go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)

    目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...

随机推荐

  1. JDK1.7 的 HashMap

    HashMap是一个用于存储key-value的键值对集合,每个键值对都是一个Entry.这些键值对分散存储在一个数组中,这个数组就是HashMap的主干. HashMap每个初始值都为null. 1 ...

  2. 10 dict嵌套与升级

    dic = { 'name':['alex','wusir','taibai'], 'py9':{ ', 'learm_money':19800, 'addr':'CBD', }, 'age':21 ...

  3. 设置了error_reporting(E_ALL)还是不显示错误

    原因就是在php.ini里面将display_errors关闭了.可以在php.ini里面将display_errors配置为On,然后重启php-fpm ini_set('display_error ...

  4. Delphi中Chrome Chromium、Cef3学习笔记(一)

    原文   http://blog.csdn.net/xtfnpgy/article/details/46635225   官方下载地址:https://cefbuilds.com/ CEF简介: 嵌入 ...

  5. springcloud流程图

    自己画的: 别人画的 别人画的2

  6. 用js控制 给一个input赋值之后,change事件不能捕获到,解决办法

    你用js给input赋值后要调用change方法 下面是jquery的写法 $('input#3').val("50"); $('input#3').change(); 自己试试吧

  7. 【前言】Go语言开坑

    很早之前就已经听过Go语言的大名,今天终于要开坑研究Go了,来吧看看<Go语言从入门到入坟>. [Go语言学习目录] 1. Go安装 2. Go变量(Variables) 3. Go语言基 ...

  8. c#: Label控件加入AutoHeight属性

    此功能在界面布局中颇为实用,录代码以记之: public class LabelEx : Label { private bool autoHeight = true; [DefaultValue(t ...

  9. VUE项目小试牛刀

    首先安装webstorm:http://www.jetbrains.com/webstorm/  (推荐) 再安装node.js:https://nodejs.org/en/download/  (必 ...

  10. React-router4 第五篇 Preventing Transitions 防止转换

    文档地址:https://reacttraining.com/react-router/web/example/preventing-transitions 大概意思就是说:我在这个页面上写东西呢?不 ...