React Native之Navigator
移动应用很少只包含一个页面。从你添加第二个页面开始,就得考虑如何管理多个页面间的跳转了。 导航器正是为此而生。它可以管理多个页面间的跳转,也包含了一些常见的过渡动画,包括水平翻页、垂直弹出等等。 NavigatorReact Native目前有几个内置的导航器组件,一般来说我们首推 场景(Scene)的概念与使用无论是 场景简单来说其实就是一个全屏的React组件。与之相对的是单个的 下面我们来定义一个仅显示一些文本的简单场景。创建一个名为“MyScene.js”的文件,然后粘贴如下代码: import React,{ Component } from 'react';
import { View,Text } 'react-native';
export default class MyScene extends Component {
static get defaultProps() {
return {
title: 'MyScene'
};
}
render() {
return (
<View>
<Text>Hi! My name is {this.props.title}.</>
/View>
)
}
}
注意组件声明前面的 import { AppRegistry } 'react-native';
// ./MyScene表示的是当前目录下的MyScene.js文件,也就是我们刚刚创建的文件
// 注意即便当前文件和MyScene.js在同一个目录中,"./"两个符号也是不能省略的!
// 但是.js后缀是可以省略的
import MyScene './MyScene';
YoDawgApp Component {
<MyScene />
)
}
}
AppRegistry.registerComponent('YoDawgApp',() => YoDawgApp);
我们现在已经创建了只有单个场景的App。其中的 使用Navigator场景已经说的够多了,下面我们开始尝试导航跳转。首先要做的是渲染一个 render() {
return (
Navigator
initialRoute={{ title'My Initial Scene',index: 0 }}
renderScene={(route,navigator) => {
<MyScene title={route.title} >
}}
>
);
}
使用导航器经常会碰到“路由(route)”的概念。“路由”抽象自现实生活中的路牌,在RN中专指包含了场景信息的对象。 将场景推入导航栈要过渡到新的场景,你需要了解 navigator.push({
title'Next Scene',179);">1,});
pop();
下面是一个更完整的示例: Component,PropTypes } import { Navigator,Text,TouchableHighlight,View } SimpleNavigationApp Navigator
initialRoute0 }}
renderScene=>
<MyScene
titletitle}
// 推入新场景所调用的方法
onForward={() => {
const nextIndex = route.index + 1;
push({
title'Scene ' + nextIndex,93);">: nextIndex,});
}}
// 返回上一个场景所调用的方法
onBack=> {
if (route.> 0) {
pop();
}
}}
>
}
>
)
}
}
static propTypes = {
title: PropTypes.string.isRequired,onForward: PropTypes.func.isRequired,onBack>Current Scene: { title }<TouchableHighlight onPress={this.props.onForward}>
>Tap me to load the next scene/TouchableHighlightthis.props.onBack}>Tap me to go back在这个例子中, MyScene 通过title 属性接受了路由对象中的title值。它还包含了两个可点击的组件TouchableHighlight ,会在点击时分别调用通过props传入的onForward 和onBack 方法,而这两个方法各自调用了navigator.push() 和navigator.pop() ,从而实现了场景的变化。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |