使用react-native做一个简单的应用-05 navigator的使用
今天生病了,难受。。。
Navigator顾名思义就是导航器的意思。
在Android和iOS中,导航器的样式是不一样的 ,有一个比较好的网址可以提供大家学习(网址),由于样式的不统一,于是我决定自己做一个样式,就不再使用原生的样式了。
1 import React from 'react-native' 2 import WelcomeScreen from './screens/WelcomeScreen' 3 import MainRoute from './screens/MainRoute' 4 import RegisterScreen from './screens/UserLRScreen/RegisterScreen' 5 import LoginScreen from './screens/UserLRScreen/LoginScreen' 6 import SearchScreen from './screens/SearchScreen' 7 import CommodityScreen from './screens/CommodityScreen' 8 import GraphicWebView from './screens/GraphicWebView' 9 import BuyWebView from './screens/BuyWebView' 10 import CategoryScreen from './screens/CategoryScreen' 11 12 var { 13 Text, 14 View, 15 Navigator, 16 TouchableOpacity, 17 PropTypes, 18 Platform 19 } = React 20 21 class Route extends React.Component { 22 static propTypes = { 23 navigator: PropTypes.object, 24 commodity: PropTypes.string 25 }; 26 render () { 27 return ( 28 <Navigator 29 initialRoute={{id: Platform.OS === 'ios' ? 'MainRoute' : 'WelcomeScreen', name: 'Index'}} 30 renderScene={ this.renderScene.bind(this) } 31 configureScene={(route) => { 32 return Navigator.SceneConfigs.FloatFromRight 33 }} /> 34 ) 35 } 36 37 renderScene (route, navigator) { 38 var routeId = route.id 39 if (routeId === 'WelcomeScreen') { 40 return ( 41 <WelcomeScreen 42 navigator={navigator} /> 43 ) 44 } 45 if (routeId === 'MainRoute') { 46 return ( 47 <MainRoute 48 navigator={navigator}/> 49 ) 50 } 51 if (routeId === 'RegisterScreen') { 52 return ( 53 <RegisterScreen 54 navigator={navigator} /> 55 ) 56 } 57 if (routeId === 'LoginScreen') { 58 return ( 59 <LoginScreen 60 navigator={navigator} /> 61 ) 62 } 63 if (routeId === 'SearchScreen') { 64 return ( 65 <SearchScreen 66 navigator={navigator} /> 67 ) 68 } 69 if (routeId === 'CommodityScreen') { 70 return ( 71 <CommodityScreen 72 route={route} 73 navigator={navigator} {...route.passProp}/> 74 ) 75 } 76 if (routeId === 'GraphicWebView') { 77 return ( 78 <GraphicWebView 79 route={route} 80 navigator={navigator} {...route.passProp}/> 81 ) 82 } 83 if (routeId === 'BuyWebView') { 84 return ( 85 <BuyWebView 86 route={route} 87 navigator={navigator} {...route.passProp}/> 88 ) 89 } 90 if (routeId === 'CategoryScreen') { 91 return ( 92 <CategoryScreen 93 route={route} 94 navigator={navigator} {...route.passProp}/> 95 ) 96 } 97 return this.noRoute(navigator) 98 } 99 100 noRoute (navigator) { 101 return ( 102 <View style={{flex: 1, alignItems: 'stretch', justifyContent: 'center'}}> 103 <TouchableOpacity style={{flex: 1, alignItems: 'center', justifyContent: 'center'}} 104 onPress={() => navigator.pop()}> 105 <Text style={{color: 'red', fontWeight: 'bold'}}>请在 index.js 的 renderScene 中配置这个页面的路由</Text> 106 </TouchableOpacity> 107 </View> 108 ) 109 } 110 } 111 112 module.exports = Route
不要看着代码很长,其实需要理解的就是一点点
首先介绍一下下面的代码,其中initialRoute,表示首先去加载的是哪一个界面(当然是欢迎界面了),由于iOS有默认的欢迎界面我们就不需要欢迎界面了,因此在这里判断一下是在哪个平台运行的。renderScene就是你需要显示的界面了,在这里我用id去区分每一个界面。configureScene:这个是页面之间跳转时候的动画。可以选择自己喜欢的跳转风格。
1 <Navigator 2 initialRoute={{id: Platform.OS === 'ios' ? 'MainRoute' : 'WelcomeScreen', name: 'Index'}} 3 renderScene={ this.renderScene.bind(this) } 4 configureScene={(route) => { 5 return Navigator.SceneConfigs.FloatFromRight 6 }} />