名称
|
类型
|
说明
|
initialRoute | object | 导航的初始route(第一个显示的); |
initialRouteStack | object | 导航的route集合,如果initialRoute没有设置,这个属性是必填的。如果这个属性没有,它将会默认传递一个仅仅包含initialRoute的集合; |
renderScene | function | 必填的方法,它根据给定的ruote渲染夜间,将被使用route和navigator对象参数调用; |
navigationBar | view | 导航的可选组件导航标题栏,需要设置左按钮,右按钮和标题属性。这个组件将会获取两个属性:navigator和navState代表导航组件和它的状态。这个组件当ruote改变的时候会重新渲染; |
configureScene | function | 可选的方法,你可以通过它配置页面切换的动画和手势。将会使用route和routeStack参数调用,route代表导航当前显示的页面,routeStack是导航当前展示的route集合; |
'use strict'; var React = require('react'); var ReactNative = require('react-native'); var { AppRegistry, StyleSheet, Navigator, Text, Image, TouchableOpacity, } = ReactNative; //引入子页面 var Page1 = require('./Page1'); var Page2 = require('./Page2'); var Page3 = require('./Page3'); //设置导航栏 var NavigationBarRouteMapper = { //设置导航栏左按钮 LeftButton: function(route,navigator,index,navState) { if(index === 0){ return null; }else{ return( <TouchableOpacity style={styles.navBarLeftButton} onPress={()=>{try{navigator.jumpBack();}catch(error){}}}> <Text style={[styles.navBarText, styles.navBarButtonText]}>Back</Text> </TouchableOpacity> ); } }, //设置导航栏标题 Title: function(route,navigator,index,navState) { return (<Text style={[styles.navBarText, styles.navBarTitleText]}>{route.title}</Text>); }, //设置导航栏右按钮 RightButton: function(route,navigator,index,navState) { if(index === navState.routeStack.length - 1){ return null; }else{ return( <TouchableOpacity style={styles.navBarRightButton} onPress={()=>{navigator.jumpForward();}}> <Text style={[styles.navBarText, styles.navBarButtonText]}>Next</Text> </TouchableOpacity> ); } } }; var MyAwesomeApp = React.createClass ({ //设置导航子页面切换动画 configureScence: function(route) { return Navigator.SceneConfigs.FadeAndroid; }, //设置导航子页面导航路由方式 renderScene: function(route, navigator) { this._navigator = navigator; switch(route.name) { case 'Page1': return <Page1 navigator={navigator}/>; case 'Page2' : return <Page2 navigator={navigator} />; case 'Page3' : return <Page3 navigator={navigator} />; } }, render: function() { const routes = [ {name: 'Page1', title: 'Title1', index: 0}, {name: 'Page2', title: 'Title2', index: 1}, {name: 'Page3', title: 'Title3', index: 2}, ]; return( //返回导航栏视图,并通过initialRoute显示第一次显示的子页面,initialRouteStack导航栏的子页面路由栈,configureScence导航栏子页面切换动画,navigationBar导航栏标题栏实现,renderScene导航栏路由方式 <Navigator style={styles.nav} initialRoute={routes[0]} initialRouteStack={routes} configureScence={this.configureScence} navigationBar={<Navigator.NavigationBar style={styles.navBar} routeMapper={NavigationBarRouteMapper}/>} renderScene={this.renderScene}/> ); } }); var styles = StyleSheet.create({ nav: { flex: 1, }, navBar: { backgroundColor: 'white', }, navBarText: { fontSize: 16, marginVertical: 10, }, navBarTitleText: { color: '#373E4D', fontWeight: '500', marginVertical: 9, marginLeft: 103, }, navBarLeftButton: { paddingLeft: 10, }, navBarRightButton: { paddingRight: 10, }, navBarButtonText: { color: '#5890FF', }, }); AppRegistry.registerComponent('MyAwesomeApp', () => MyAwesomeApp);Page1.js文件(其它Page2.j、Page3.js代码类似)
'use strict'; var React = require('react'); var ReactNative = require('react-native'); var { StyleSheet, View, Text, } = ReactNative; var Page1 = React.createClass ({ render: function() { return( <View style={styles.container}> <Text style={styles.pagetext}>page1Content</Text> </View> ); } }); var styles = StyleSheet.create({ container: { flex: 1, alignItems: 'center', justifyContent: 'center', }, pagetext: { fontSize: 16, fontWeight: '500', } }); module.exports = Page1;三、运行结果:
const routes = [ {name: 'MyHotel', title: '我的酒店', index: 0}, ... ... //photosGroup路由之间传递的值 {name: 'SelectPhoto', title: '选择相片', index: 5, photosGroup:''}, ];2.在使用navigator.push中传递photosGroup给renderScene方法处理;
this.props.navigator.push({name: "SelectPhoto",title:photosGroup.name,photosGroup:photosGroup});3.需改renderScene函数,将route中的传递信息,以属性传递给下一个页面组件;
renderScene: function(route, navigator) { this._navigator = navigator; switch(route.name) { case 'MyHotel': return <MyHotel navigator={navigator}/>; ... ... case 'SelectPhoto' : //将route中传递的值photosGroup,以属性photosGroup传递给新的页面组件SelectPhoto return <SelectPhoto navigator={navigator} photosGroup={route.photosGroup}/>; } },4.在子页面,使用this.props. photosGroup就可以访问路由之间传递的数据;
render: function() { return( <View style={styles.container}> <Text style={styles.pagetext}>{this.props.photosGroup.name}</Text> <Text style={styles.pagetext}>{this.props.photosGroup.count}</Text> <Text style={styles.pagetext}>{this.props.photosGroup.imageUri}</Text> </View> ); }