美文网首页
React Native导航器React Navigation

React Native导航器React Navigation

作者: Eternaldream | 来源:发表于2017-07-27 22:35 被阅读303次

    简介

    React Native在0.44版本中将Navigator从核心库中删除,主要推荐使用于今年一月份开源的React-navigation库,据称有原生般的性能体验效果,可能成为未来React Native导航组件的主力军,下面我们来介绍下该组件的主要属性和方法.

    这个库主要包含三类组件:

    1. StackNavigator: 用来跳转页面和传递参数

    2. TabNavigator: 类似底部导航栏,用来在同一个屏幕下切换不同界面

    3. DrawerNavigator: 侧滑菜单导航栏,用于设置带抽屉导航的屏幕

    官方文档: https://reactnavigation.org/docs/intro/

    使用

    1. 属性介绍:

    1. StackNavigator属性介绍

    navigationOptions:配置StackNavigator的一些属性。  
        title:标题,如果设置了这个导航栏和标签栏的title就会变成一样的,不推荐使用  
        header:可以设置一些导航的属性,如果隐藏顶部导航栏只要将这个属性设置为null  
        headerTitle:设置导航栏标题,推荐  
        headerBackTitle:设置跳转页面左侧返回箭头后面的文字,默认是上一个页面的标题。可以自定义,也可以设置为null  
        headerTruncatedBackTitle:设置当上个页面标题不符合返回箭头后的文字时,默认改成"返回"  
        headerRight:设置导航条右侧。可以是按钮或者其他视图控件  
        headerLeft:设置导航条左侧。可以是按钮或者其他视图控件  
        headerStyle:设置导航条的样式。背景色,宽高等  
        headerTitleStyle:设置导航栏文字样式  
        headerBackTitleStyle:设置导航栏‘返回’文字样式  
        headerTintColor:设置导航栏颜色  
        headerPressColorAndroid:安卓独有的设置颜色纹理,需要安卓版本大于5.0  
        gesturesEnabled:是否支持滑动返回手势,iOS默认支持,安卓默认关闭  
    StackNavigator(RouteConfigs, StackNavigatorConfig) 构造函数:
    RouteConfigs: 主要是来配置页面路由的,所有的界面都必须配置在里面.
        screen:对应界面名称,需要填入import之后的页面  
    StackNavigatorConfig: 主要是配置整个路由的,包括跳转动画,跳转方式等.
        initialRouteName: 初始化哪个界面为根界面,如果不配置,默认使用RouteConfigs中的第一个页面当做根界面
        initialRouteParams: 初始化根界面参数,主要是给根视图传递一些参数,通过this.props.navigation.state.params可以取到
        navigationOptions: 配置默认的navigationOptions
        mode: 跳转方式,一种是card,默认的,在iOS上是从右到左跳转,在Android上是从下到上,都是使用原生系统的默认跳转方式。一种是modal,只针对iOS平台,模态跳转。
        headerMode: 跳转过程中,导航条的动画效果,有三个值,float表示会渐变,类似于iOS的原生效果,screen表示没有渐变。none表示隐藏导航条
        cardStyle: 可以统一定义界面的颜色,例如背景色
        transitionConfig:配置页面跳转的动画
        onTransitionStart: 页面跳转动画即将开始的回调
        nTransitionEnd: 页面跳转动画结束的回调
    
    Navigation Prop
        navigate:路由方法,主要来启动另一个页面
        state:状态,其实StackNavigator内部维护了两个路由栈,一个名为newState,是当前显示页面之前的所有页面,包括当前界面。一个名为lastState,当然,通过state还能拿到很多参数。
        setParams: 设置参数,记住,一定不要在render方法中调用此方法。
        goBack: 返回
        dispatch: 给当前界面设置action,会替换原来的跳转,回退等事件
        
    navigate
        这个方法可以传递三个参数: navigate(routeName, params, action)
        routeName: 页面名称,一定要在路由配置中配置。
        params: 传递参数到下一个页面
        action: action
    setParams
        设置当前页面的参数,记住,调用此方法一定要在componentDidMount
        componentDidMount() {
        var {setParams} = this.props.navigation;
        setParams({'haha':'abc'});
    }
    goBack
        回退到指定界面,如果什么都不传,回退到上一个界面,传null,回退到任意界面。传key,可以回退到指定界面
        this.props.navigation.goBack();
        this.props.navigation.goBack(null);
        this.props.navigation.goBack('Profile');
    

    2. TabNavigator在iOS上默认类似于TabBar,在Android中类似于TabLayout:

    构造方法:
    TabNavigator(RouteConfigs, TabNavigatorConfig)
    
    RouteConfigs: 配置路由,也可以配置navigationOptions,但是,在这里配置的优先级比在页面中配置的优先级高,所以,我们一般在单个页面中配置所有的navigationOptions。
        screen:和导航的功能是一样的,对应界面名称,可以在其他页面通过这个screen传值和跳转。  
    
    TabNavigatorConfig:
        1. tabBarComponent: 默认两种方式,TabBarBottom和TabBarTop,可以通过如下代码导入:import {TabBarBottom,TabBarTop} from 'react-navigation';,这两者的区别主要是样式和位置的区别,iOS上默认使用TabBarBottom,Android上默认使用TabBarTop。
        2. tabBarPosition: 配置tab的位置,top和bottom
        3. swipeEnabled: 是否可以滑动切换tab
        4. animationEnabled: 点击选项卡切换界面是否需要动画
        5. lazy: 是否懒加载界面,默认一次加载所有的界面,我们最好设置为true
        6. tabBarOptions: tab的样式等配置,我们下面详细说
        7. initialRouteName,第一次初始化哪个界面,默认初始化第一个。
        8. order,tab排序,默认使用配置路由的顺序
        9. paths: 配置path
        10. backBehavior,当Android点击返回键的时候,做的处理,initialRoute返回到初始化的界面,none退出应用
    tabBarOptions: 这个参数主要配置样式,针对TabBarBottom和TabBarTop。
        TabBarBottom: 
            activeTintColor: 选中的文字颜色
            activeBackgroundColor: 选中的背景色
            inactiveTintColor: 未选中的文字颜色
            inactiveBackgroundColor: 未选中的背景色
            showLabel: 是否显示标题,默认显示
            style: 定义item的样式
            labelStyle: 标题的样式
        TabBarTop:
            activeTintColor: 选中的文字颜色
            inactiveTintColor: 未选中的文字颜色
            showIcon: 是否显示图标,默认显示
            showLabel: 是否显示标题,默认显示
            upperCaseLabel: 使用大写字母
            pressColor: 定义颜色,大约Android5.0的一种按压效果
            pressOpacity: 按压下去的透明度,在iOS或者Android5.0之前
            scrollEnabled: 是否能够滚动,类似于今日头条的标题头
            tabStyle: 定义item的样式
            indicatorStyle: 指示器的颜色
            labelStyle: 文字的样式
            iconStyle: 图标的样式
            style: 定义tab的样式
    NavigationOptions: 配置tabBarItem的相关属性:
        title: 标题
        tabBarVisible: 是否可见
        tabBarIcon: 配置图片,当然,完全可以不使用图片
        tabBarLabel: 也是配置标题,只不过title既能配置tab的标题,也能配置navigation的标题
    

    3. DrawerNavigator属性介绍:

    navigationOptions: 配置侧滑显示的具体属性(必须写成这个名字),有以下参数
        title:通用标题,当你不写drawerLabel时,使用此参数作为侧滑标题,通常都不写
        drawerLabel:侧滑标题
        drawerIcon:侧滑的标题图标,这里会回传两个参数,{focused: boolean, tintColor: string},focused表示是否是选中状态,tintColor表示选中的颜色,这个颜色是我们自己在根视图定义的。当然,你也可以使用其他的组件来作为图标,比如Text组件。
        
    打开侧滑方法: this.props.navigation.navigate('DrawerOpen')
    关闭侧滑方法: this.props.navigation.navigate('DrawerClose')
    
    构造方法:
    DrawerNavigator(RouteConfigs, DrawerNavigatorConfig) 接收两个参数,一个为页面路由配置,一个为显示的配置.
    RouteConfigs: 配置所有的界面
        screen: 对应界面名称,可以在其他页面通过这个screen传值和跳转
    
    DrawerNavigatorConfig  
        drawerWidth: 侧滑栏的宽度,如果你不想写死,可以使用Dimensions获取屏幕的宽度,动态计算
        
        drawerPosition: 侧滑的方向,left和right,默认left
        
        contentComponent - 用于呈现抽屉内容的组件,例如导航项 接收抽屉的导航。 默认为DrawerItems,可以自定义侧滑页
        
        contentOptions: 主要配置侧滑栏条目的属性,针对DrawerItems,可以通过这个属性来设置颜色,背景颜色等
        
        initialRouteName - 初始路由的routeName  
        
        order - 定义抽屉项目顺序的routeNames数组。 
        路径 - 提供routeName到路径配置的映射,它覆盖routeConfigs中设置的路径。
        
        backBehavior - 后退按钮是否会切换到初始路由? 如果是,设置为initialRoute,否则为none。 默认为initialRoute行为  
      
       DrawerItems的contentOptions属性  
      
        activeItemKey: 定义当前选中的页面的key
        
        activeTintColor - 选中条目状态的文字颜色  
        
        activeBackgroundColor - 选中条目的背景色  
        
        inactiveTintColor - 未选中条目状态的文字颜色 
        
        inactiveBackgroundColor - 未选中条目的背景色  
        
        onItemPress: 选中条目的回调,这个参数属性为函数,会将当前路由回调过去
        
        内容部分的样式样式对象  
        labelStyle - 当您的标签是字符串时,要覆盖内容部分中的文本样式的样式对象  
    

    二: 界面跳转,传值,取值

    在界面组件注入到StackNavigator中时,界面组件就被赋予了navigation属性,即在界面组件中可以通过this.props.navigation获取并进行一些操作。

    1. 通过navigate函数实现界面之间跳转:
    this.props.navigation.navigate('Mine');
    

    参数为我们在StackNavigator注册界面组件时的名称。同样也可以从当前页面返回到上一页:

    this.props.navigation.goBack();  
    
    1. 跳转时传值:
    this.props.navigation.navigate('Mine',{info:'传值过去'});  
    

    第一个参数同样为要跳转的界面组件名称,第二个参数为要传递的参数,info可以理解为key,后面即传递的参数。

    1. 获取值:
    {this.props.navigation.state.params.info}  
    

    通过state.params来获取传来的参数,后面为key值。此处为info。

    相关文章

      网友评论

          本文标题:React Native导航器React Navigation

          本文链接:https://www.haomeiwen.com/subject/qybtlxtx.html