https://facebook.github.io/react-native/docs/navigator.html

Navigator实现了页面之间的跳转。

Demo描述:打开即进入“课程”页面,点击详情按钮,进入“课程详情”页面,“课程详情”页面点击头部返回按钮返回“课程”页面。

Navigator简单使用

添加 Navigator 的组件<Navigator/>。

设置方法: 初始化路由(initialRoute),配置场景动画(configureScene),渲染场景(renderScene),初始化路由(initialRoute),使用CourseListView页面作为首页。

//主模块
render() {
const routes = [
{component: CourseListView, name: 'CourseList'}
];
return (
<Navigator
style={{flex:1}}
configureScene={this.configureScene}
initialRoute={routes[0]}
renderScene={this.renderScene}/>
);
}

配置场景动画(configureScene): 根据路由的type属性, 判断使用的动画样式, 底部弹出或右侧弹出,或者官网介绍的其他样式。

configureScene(route, routeStack) {
if (route.type == 'Bottom') {
return Navigator.SceneConfigs.FloatFromBottom; // 底部弹出
}
return Navigator.SceneConfigs.PushFromRight; // 右侧弹出
}

渲染场景(renderScene): 使用动态加载组件的方式。 设置加载页面的navigator参数, 其余使用route.passProps属性传递其他参数。可以动态加载组件,也可以静态加载组件。

//使用动态加载组件
renderScene(route, navigator) {
return <route.component navigator={navigator} {...route.passProps} />;
} //使用静态加载组件,不是特别灵活,还需要预定义组件
renderScene(route, navigator) {
if (route.name == 'CourseList') {
return <CourseListView navigator={navigator} {...route.passProps}/>
} else if (route.name == 'CourseDetail') {
return <CourseDetailView navigator={navigator} {...route.passProps}/>
}
}

以上是介绍index.ios.js设置默认路由的方法。

CourseListView.js

/**
* Created by myz on 16/12/8.
*/
'use strict'; import React, { Component } from 'react';
import {
Navigator,
Text
} from 'react-native';
import {
Button,
Container,
Content,
Header,
Title
} from 'native-base'; import CourseDetailView from './CourseDetailView.js'; export default class CourseListView extends Component {
_navigate(name, type = 'Normal') {
this.props.navigator.push({
component: CourseDetailView,
name: 'CourseDetail',
passProps: {
name: name
},
type: type
})
} render() {
return (
<Container>
<Header>
<Title>课程</Title>
</Header>
<Content>
<Button block style={{marginTop:30}} onPress={()=>this._navigate('CourseDetail')}>
<Text>我是课程</Text>
</Button>
</Content>
</Container>
);
}
}

之后再定义CourseDetailView组件,这样就可以实现页面跳转了。

_navigate()方法导航跳转, 调用navigator.push()方法。 传递参数passPropsname属性, type动画类型, component跳转组件。
跳到指定页面是调用navigator.push()方法;
返回第一页是调用this.props.navigator.pop(),使当前页面出栈,显示上一个栈内页面。

统一导航栏

额外添加navigationBar的属性, 自定义设置导航栏, 保持所有页面的导航栏一致. 属性添加<NavigationBar/>标签, 通过routeMapper控制导航栏的功能和样式。

<Navigator
style={{flex:1}}
configureScene={this.configureScene}
initialRoute={routes[0]}
renderScene={this.renderScene}
navigationBar={
<Navigator.NavigationBar
routeMapper={NavigationBarRouteMapper}/>}
/> 


NavigationBarRouteMapper用来设置左键LeftButton,右键RightButton,标题Title。

var NavigationBarRouteMapper = {
// 左键
LeftButton(route, navigator, index, navState) {
if (index > 0) {
return (
<Button transparent onPress={() => {if (index > 0) {navigator.pop()}}}>
<Icon name='ios-arrow-back'/>
</Button>
);
}
},
// 右键
RightButton(route, navigator, index, navState) {
if (route.onPress)
return (
<Button onPress={() => route.onPress()}>
<Text> {route.rightText || '右键'}</Text>
</Button>
);
},
// 标题
Title(route, navigator, index, navState) {
return (
<Title>{route.name}</Title>
);
}
};

同时,当“课程”页面跳转的时候,传递的路由信息有些变化,控制“课程详情”页面导航栏的显示信息。

_onPress() {
alert("我是导航栏右边按钮!");
} _navigate(name, type = 'Normal') {
this.props.navigator.push({
component: CourseDetailView,
name: '课程详情',
passProps: {
name: name
},
onPress: this._onPress,
rightText: '右边',
type: type
})
}

ReactNative Navigator的更多相关文章

  1. React-Native Navigator 过渡动画卡顿的解决方案

    在RN0.44版本之前,路由导航跳转几乎是使用的是Navigator组件,在0.44版本以后就不推荐使用了,官方推荐的是react-navigation,当然还是可以在废弃的库中找到: import ...

  2. react-native 横向滚动的商品展示

    在app中会有这种页面 像这样商品是横向的,而且要滚动,思路是利用 ScrollView 横向的滚动 思路: (a): 横向滚动的整体作为一个组件  ShopCenter {/*** 横向滚动 *** ...

  3. Ajax中最有名axios插件(只应用于Ajax)(post方法,官网写错了,应是字符串格式)

    /* axios v0.18.0 | (c) 2018 by Matt Zabriskie */!function(e,t){"object"==typeof exports&am ...

  4. 基于 react-navigation 父子组件的跳转链接

    1.在一个页面中中引入一个组件,但是这个组件是一个小组件,例如是一个cell,单独的每个cell都是需要点击有链接跳转的,这个时候通常直接使用 onPress 的跳转就会不起作用 正确的处理方法是,在 ...

  5. react-native的tabbar和navigator混合使用

    前段时间搭建项目使用了navigator和react-native-tab-navigator,现在我教大家搭建一个通用的简单框架. 先把几张图贴在这里,这就是我们今天要搭建的东西,别看页面简单,但是 ...

  6. 使用react-native做一个简单的应用-05 navigator的使用

    今天生病了,难受... Navigator顾名思义就是导航器的意思. 在Android和iOS中,导航器的样式是不一样的 ,有一个比较好的网址可以提供大家学习(网址),由于样式的不统一,于是我决定自己 ...

  7. react-native中的navigator

    第一步安装相关插件 添加一些依赖 package com.awesomeproject; import com.facebook.react.ReactActivity; import com.fac ...

  8. React-Native到0.44版本后Navigator 不能用的问题

    新升级  到0.46版本以后 Navigator 不能使用报错. 'Navigator is deprecated and has been removed from this package. It ...

  9. ReactNative学习笔记(七)Navigator的使用

    前言 Navigator主要用于ReactNative中的跳转,中文文档: http://reactnative.cn/docs/0.39/using-navigators.html 懒得打字介绍更多 ...

随机推荐

  1. 使用docker-maven-plugin插件构建docker镜像(已过时)

    可以参考博客:https://blog.csdn.net/aixiaoyang168/article/details/77453974 docker-maven-plugin官网推荐在新项目中使用do ...

  2. 网页内容切换效果实现的15个jQuery插件

    原文发布时间为:2010-02-01 -- 来源于本人的百度文章 [由搬家工具导入] http://www.webjx.com/javascript/jsajax-15550.html

  3. lightgbm 学习资料汇总

    操作实例:https://blog.csdn.net/luoyexuge/article/details/72956491 中文文档:https://lightgbm.apachecn.org/cn/ ...

  4. IMAGE_OPTIONAL_HEADER32 结构作用

    IMAGE_OPTIONAL_HEADER32 结构作用 接 着我们来谈谈 IMAGE_OPTIONAL_HEADER 结构,正如名字的意思,这是一个可选映像头,是一个可选的结构,但是呢,实际上上节课 ...

  5. Scrapy笔记:CrawSpider中rules中的使用

    scrapy.spiders.crawl.CrawlSpider类的使用 这个类比较适用于对网站爬取批量网页,相比于Spider类,CrawlSpider主要使用规则(rules)来提取链接 rule ...

  6. (7)centos7安装配置ftp服务器

    1.安装vsftpd yum install vsftpd -y 2.设置开机启动vsftpd ftp服务 systemctl enable vsftpd.service 3.启动vsftpd服务 s ...

  7. bzoj 5125: [Lydsy1712月赛]小Q的书架

    新学了一波 决策单调性 dp 套路.... 这种dp一般是长这样的 => f[i][j] = max/min  { f[i-1][k] + cost(k+1,j)} ,其中cost函数满足四边形 ...

  8. jersey上传文件解决办法

    这两天在使用jersey 构建的jersey JAX-RS REST服务器,在通过POST方法上传文件的时候,如果根据example来操作的话会引发如下异常: SEVERE: Missing depe ...

  9. RequireJS解决代码依赖问题,异步加载js,避免页面失去相应

    RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤.可以用它来加速.优化代码,但其主要目的还是为了代码的模块化.它鼓励在使用脚本时以modul ...

  10. selenium用法 (python)

    滑动到指定元素位置 browser.find_element_by_xpath("//font[text()='资产管理部经办人'][1]").location_once_scro ...