1.router stack
2.Navigator和兄弟組件NavigatorIOS
NavigatorIOS只能在IOS中使用夭谤,在Android中不能使用,而Navigator既可以在IOS中使用势就,也可以在Android中使用。
3.<Navigator>
比較穩(wěn)定辐益,但是比較繁瑣偷崩。從0.44版本開始,Navigator被從react native的核心組件庫中剝離到了一個名為react-native-deprecated-custom-components的單獨(dú)模塊中帚呼。如果你需要繼續(xù)使用Navigator,則需要先yarn add react-native-deprecated-custom-components
安裝皱蹦,然后從這個模塊中import煤杀,即import { Navigator } from 'react-native-deprecated-custom-components'
常用參數(shù)
configureScene,類型是function沪哺,可選沈自。通過這個參數(shù)可以修改界面在導(dǎo)航時候切換的動畫。
initialRoute辜妓,類型是對象枯途,表明最初的Route對象。一個Route簡單來說就是一個界面籍滴,Navigator用Route來區(qū)分不同的界面酪夷。
navigationBar,類型是node孽惰,導(dǎo)航欄
renderScene晚岭,類型是function,必須參數(shù)勋功,在這個方法里根據(jù)Route來渲染不同的Scene坦报。
常用函數(shù)
push(route) 库说,跳轉(zhuǎn)到某一個Route
pop(),推出當(dāng)前狀態(tài)
popToTop()片择,推出到第一個界面
popToRoute(route)潜的,推出到某一個界面
4.RN0.44版本以后主推的方案是一個單獨(dú)的導(dǎo)航庫react-navigation包括三種:StackNavigation,TabNavigation字管,DrawerNavigation
4.1 StackNavigation
StackNavigator(RouteConfigs, StackNavigatorConfig)
默認(rèn)情況下:
export default (
routeConfigMap: NavigationRouteConfigMap,
stackConfig: StackNavigatorConfig = {}
)
RouteConfigs:一個包含從路由名字到路由具體配置信息的映射, 它將指導(dǎo)navigator如何呈現(xiàn)當(dāng)前路由夏块。
舉例:
const ModalStack = StackNavigator ({
Home:{ screen: MyHomeScreen, },
Profile: { path: 'people/:name', screen: MyProfileScreen, },
});
StackNavigatorConfig:
路由選擇:
initialRouteName-為棧設(shè)置默認(rèn)的場景,必須是路由配置里已經(jīng)配置過的一個場景纤掸。
initialRouteParams-初始路由參數(shù)
navigationOptions-場景中需要使用的默認(rèn)navigation選項(xiàng)
paths-路由配置的地址映射(A mapping of overrides for the paths set in the route configs)
視覺選項(xiàng):
mode-定義渲染與動畫樣式,取值如下:
card-使用標(biāo)準(zhǔn)的ios和Android場景樣式(default)
modal-使新場景從底部滑入脐供,這是常見的ios樣式,只在ios中有效借跪,android無效
headerMode-指定頭部(header)的渲染效果政己,取值如下:
float-渲染一個停留在頂部的header,動畫時不改動header掏愁,這是ios一種常見的模式
screen-每個場景都附有一個header,header的進(jìn)出與場景一致歇由,在Android中場用的
模式
none-去除頭部渲染
cardStyle-使用這個屬性覆蓋或者擴(kuò)充棧中個別card的默認(rèn)樣式
transitionConfig-該方法返回一個動畫對象用來覆蓋默認(rèn)的場景動畫
onTransitionStart-當(dāng)card的切換動畫即將開始時回調(diào)該方法
onTransitionEnd-當(dāng)card的切換動畫完成時回調(diào)該方法
舉例:
const MainSrceenStackNavigator = StackNavigator(
{
MainScreenNavigator: {screen: MainScreenNavigator},
DiscoverDetail: {screen: DiscoverDetail},
SettingDetail: {screen: SettingDetail}
},
{
initialRouteName: 'MainScreenNavigator',
mode:'card',
headerMode:'screen',
}
);
4.2 TabNavigator
TabNavigator(RouteCofigs, TabNavigatorConfig)
RouteConfigs
路由配置對象,路由名到路由配置的映射果港,告訴navigator當(dāng)前的路由
TabNavigatorConfig
tabBarComponent-用來做選擇欄的組件沦泌,比如TabBarBottom(iOS default), TabBarTop(Android default)
tabBarPosition-選擇欄位置辛掠,可以為'top'或者'bottom'
swipeEnable-是否允許在選擇間切換
animationEnabled-改變選擇時是否需要動畫
lazy-是否采用只在需要的時候臨時渲染谢谦,而不是提前渲染
tabBarOptions-配置選擇欄,具體將在下方提及萝衩。 幾個傳遞到底層路由器回挽,修改導(dǎo)航邏輯的參數(shù)
initRouteName-定義選擇欄首次加載時的路由名
order-定義選擇欄排序的路由名數(shù)組
paths-提供一個從路由名到地址配置的映射,它在routeConfing中被覆蓋
backBahavior-返回鍵是否引起選擇欄位置置于初始的選擇狀態(tài)猩谊?如果是千劈,設(shè)為initalRoute, 否則設(shè)為none。默認(rèn)為initialRoute的行為牌捷。
舉例:
const MyApp = TabNavigator({
Home: { screen: MyHomeScreen, },
Notifications: { screen: MyNotificationsScreen, },
}, {
tabBarOptions: { activeTintColor:'#e91e63', },
});
由TabNavigator(...)方法創(chuàng)造的導(dǎo)航組件墙牌,屬性如下:
screenProps-傳遞給子場景和導(dǎo)航選項(xiàng)額外的選項(xiàng),例如:
const TabNav = TabNavigator({
// config
});
<TabNav
screenProps={/* this prop will get passed to the screen components as this.props.screenProps */}
/>
4.3 DrawerNavigation
DrawerNavigator(RouteConfigs, DrawerNavigatorConfig)
RouteConfigs
路由配置對象是一個由路由名字到路由配置的對象暗甥,用于告訴導(dǎo)航當(dāng)前的路由
DrawerNavigatorConfig
drawerWidth-抽屜的寬
drawerPosition-抽屜位置左(left)或右(right),默認(rèn)為左
contentComponent-填充該抽屜內(nèi)容的組件(Component),例如:導(dǎo)航的items喜滨。接受抽屜的navigation屬性。默認(rèn)為DrawerItems淋袖。下方有更多說明鸿市。
contentOptions-抽屜內(nèi)容的配置。