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
})
}

最新文章

  1. python基础-异常处理
  2. 软件卸载工具 Uninstall Tool 3.5.1 中文破解版
  3. savepic
  4. 【实践】jQuery实现三联联动
  5. 基情四射的两个css样式
  6. unity3d NGUI制作角色展示框
  7. CRT注册工具使用说明
  8. EF查询分页
  9. RPi 2B apache2 mysql php5 and vsftp
  10. es6 箭头函数(arrow function) 学习笔记
  11. 深度揭秘腾讯云TSF日调用量超万亿次背后技术架构
  12. 笔记:Maven 项目报告插件
  13. Linux 下查看字体
  14. 设置和获取cookie
  15. 大话设计模式:代理模式 C#
  16. golang 的 math/big 进行
  17. vue 之 key
  18. 获取ip 笔记
  19. OSGI企业应用开发(二)Eclipse中搭建Felix运行环境
  20. libsvm使用

热门文章

  1. 能量采集(bzoj 2005)
  2. 洛谷 [P3381] 最小费用最大流模版
  3. 洛谷 P1038 神经网络
  4. SQL语句效率问题的几点总结
  5. poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp
  6. android的布局-----FrameLayout(帧布局)
  7. 键盘事件keydown、keypress、keyup
  8. NGINX配置获取CloudFlare 下的访客真实IP并记录到日志
  9. ORACLE的字符串操作函数
  10. luogu P1651 塔