react-native
react-native
、reactjs
route
在須要使用的地方配置,能夠把Route
當作React
中的組件)Ref: 從react-navigation轉react-routerreact
Ref: react-native-router-flux使用技巧(API篇)git
通用性:在最新的V4版本中是基於react-navigation
實現的,若是使用過react-native-router-flux
那麼使用新版本的學習成本會低不少;github
實用性:react-navigation
雖然是官方推薦的導航庫,但其庫內部提供的,能夠直接使用的功能很簡單,有些還須要配合redux來實現須要的功能。而react-native-router-flux
基於react-navigation
實現其沒有提供的APIpopTo(跳回指定頁面)
,refresh(刷新頁面)
,replace
,Modal(相似iOS從底部彈出個新頁面的效果)
等經常使用到的功能,在下面的翻譯中有詳細說明;redux
更新維護:這點上我很佩服庫的做者,從V1更新到V4,從未背離做者的初衷,一直在對react-native
的導航進行優化、封裝,並且最讓我佩服的一點是,做者好似將react-navigation
的Issues
全都翻看過,庫裏面將react-navigation
可能存在或者已經存在的坑都填上了,並且實時更新。若是有時間,能夠查看一下CHANGELOG.md,裏面有着所有的更新記錄。react-native
export default class App extends React.Component { static propTypes = { title: PropTypes.string, } render() { return ( <Provider store={store}> <Root> <Router> <View style={styles.container}> <Scene key="test" component={Test} title="測試頁面" /> <Scene key="chatlist" component={ChatList} title="消息" /> <Scene key="chat" component={Chat} title="聊天" getTitle={this.props.title} initial/> <Scene key="login" component={Login} title="登陸" backTitle="返回聊天" /> <Scene key="signup" component={Signup} title="註冊" backTitle="返回聊天" /> </View> </Router> </Root> </Provider> ); } }
此路由器的最重要的組件, 全部 <Scene>
組件必需要有一個惟一的 key
。react-router
父節點<Scene>
不能將component
做爲prop
,由於它將做爲其子節點的組件。async
initial |
boolean |
false |
設置爲true 後,會默認顯示該頁面 |
component |
React.Component |
semi-required |
要顯示的組件,定義嵌套時不須要Scene ,參見示例。 |
Ref: React Native Basics: Using react-native-router-fluxide
【共四篇,第三篇是tabs】學習
Ref: https://github.com/react-navigation/react-navigation測試
【感受有了這個就差很少了,一個不錯的庫】
Ref: React Navigation: Stacks, Tabs, and Drawers
【質量高,有良心,有代碼】
很是簡單的抽屜導航介紹,將來講解 react-native-router-flux 時做爲對比。
/** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; import React, { Component } from 'react'; import { AppRegistry, StyleSheet, PixelRatio, Text, Image, TouchableOpacity, DrawerLayoutAndroid, ProgressBarAndroid, View } from 'react-native'; class DongFang1 extends Component { render() {
var navigationView = ( <View style={{flex: 1, backgroundColor: '#ff0'}}> <Text style={{margin: 10, fontSize: 15, textAlign: 'left'}}>我是抽屜!</Text> </View> );
return ( <DrawerLayoutAndroid drawerWidth = {100} drawerPosition = {DrawerLayoutAndroid.positions.Right} renderNavigationView= {() => navigationView} > <View style={{flex: 1, alignItems: 'center'}}> <Text style={{margin: 10, fontSize: 15, textAlign: 'right'}}>Hello</Text> <Text style={{margin: 10, fontSize: 15, textAlign: 'right'}}>React Native World!</Text> </View> </DrawerLayoutAndroid> ); } } const styles = StyleSheet.create({ flex:{ flex:1, }, }); AppRegistry.registerComponent('DongFang1', () => DongFang1);