react-navigation之 StackNavigator

2017-07-04  本文已影响1219人  东之城

react-navigation 之 StackNavigator

npm install --save react-navigation

控件主要分为三种:

  1. StackNavigator :类似于普通的Navigator,屏幕上方导航栏
  2. TabNavigator:obviously, 相当于iOS里面的TabBarController,屏幕下方标签栏
  3. DrawerNavigator:抽屉效果,左侧滑出这种效果。

StackNavigator

使用方法

以下数据可以全局设置也可以单独配置

  1. 初始化
    • StarkNavigator(routeConfigMap,stackConfig)
      routeConfigMap所有跳转的routeName 都在这配置 默认取第一个route
      stackConfig 使用页面的配置(TitleBar 都可以在这里统一配置)
  2. 跳转
    • 通过 this.props.navigation.navigate 获取 navigator
    • 调用 navigator(routName,params)进行跳转

例子:

   const Nav = StackNavigator({
       Launch: {
           screen: HomeScreen
       },
       NavTitle: {
           screen: NavTitle
       },
       TabNav: {
           screen: MainScreenNavigator
       },
       Touchable: {screen: Touchable}
   }, {
       initialRouteName: 'Launch',
       initialRouteParams: { //Launch 初始化参数
           param: '初始化',
           user: 'zoudong'
       },
       navigationOptions: {
           headerTintColor: 'red', //返回键颜色,title 颜色
           headerRight: <Text onPress={() => {
               alert('点击了title Right')
           }}>Right</Text>,
           headerTitle: <Text
               style={{
                   backgroundColor: 'red',
                   alignSelf: 'center',
                   textAlignVertical: 'center'
               }}
               onPress={() => {
                   alert('点击了title Title')
               }}> 全局Title</Text>,
           headerStyle: { /
               backgroundColor: "white"
           },
           headerTitleStyle: {
               alignSelf: 'center'
           }
       },
       mode: 'card'
   });

   export default Nav;

参数说明

StackNavigator(RouteConfigs, StackNavigatorConfig)

RouteConfigs(第一个参数)

    export type NavigationRouteConfigMap = {
    [routeName: string]: NavigationRouteConfig<*>,

    export type NavigationRouteConfig<T> = T & {
         navigationOptions?: NavigationScreenConfig<*>,
         path?: string,
    };
};

  1. RouteConfigs 类似 Android中的Mainfest.xml
    • {routeName: NavigationRouteConfig}
    • routeName //跳转使用的 routeName
    • <spac id='navigationOptions1'/>NavigationRouteConfig : 页面的配置
      {
      • path :'app:web', //optional 当深层次关联或者在web app中使用React Navigation,使用路径

      • navigationOptions:{
        //此处设置了, 会覆盖组件内的static navigationOptions设置
        //设置个标题
        title:({state}) => ${state.params.username}'s Profile'
        } 这个可以在Component 里面单独写,它会覆盖这个

StackNavigatorConfig(第二个参数)

  1. StackNavigatorConfig
 export type StackNavigatorConfig = {
     containerOptions?: void,
    } & NavigationStackViewConfig &
        NavigationStackRouterConfig;
    
    export type NavigationStackViewConfig = {
        mode?: 'card' | 'modal',
        headerMode?: HeaderMode,
        cardStyle?: Style,
        transitionConfig?: () => TransitionConfig,
        onTransitionStart?: () => void,
        onTransitionEnd?: () => void,
    };
    export type NavigationStackRouterConfig = {
        initialRouteName?: string,
        initialRouteParams?: NavigationParams,
        paths?: NavigationPathsConfig,
        navigationOptions?: NavigationScreenConfig<NavigationStackScreenOptions>,
    };
    export type NavigationStackScreenOptions = NavigationScreenOptions & {
        header?: ?(React.Element<*> | (HeaderProps => React.Element<*>)),
        headerTitle?: string | React.Element<*>,
        headerTitleStyle?: Style,
        headerTintColor?: string,
        headerLeft?: React.Element<*>,
        headerBackTitle?: string,
        headerTruncatedBackTitle?: string,
        headerBackTitleStyle?: Style,
        headerPressColorAndroid?: string,
        headerRight?: React.Element<*>,
        headerStyle?: Style,
        gesturesEnabled?: boolean,
    };

以上可知 StackNavigatorConfig中有的字段名

navigationOptions

以上有两种方式设置配置单独页面设置, 全局统一设置 还有一种方式 Component 中设置
优先级 routeConfigMap > Component > stackConfig

  static navigationOptions = {
    .....
  }

不同

  1. Navigator 用法有些类似 语法有点不同

例如:

 // Navigator
 const  navor=this.props.navigator;
 //StackNavigator
 const  navor=this.props.navigation.navigate;
  1. 跳转不一样

例如:

 // Navigator
   navor.push(route); //跳转
   1. 如果带参数:route={
        //component,params 是关键字
            component:xxx,
             params:{
                      id:xxx,
                }
             }
   2. 获取跳转带的参数 : this.props.id;
 //StackNavigator
   1. navor(routeName,params)
      routeName: 名称
      params:参数
      navor('Login',{userid:'xxx'})
上一篇下一篇

猜你喜欢

热点阅读