美文网首页react-native
react-navigation路由常用配置及使用方法

react-navigation路由常用配置及使用方法

作者: 北故城 | 来源:发表于2019-11-14 10:21 被阅读0次
    在你的 React Native 项目中安装react-navigation这个包
    yarn add react-navigation
    # or with npm
    # npm install react-navigation
    
    然后安装手势控制插件(0.59>版本<0.60 )的建议安装 1.1.3
    yarn add react-native-gesture-handler 
    # or with npm
    # npm install react-native-gesture-handler
    
    然后连接到原声库

    react-native link react-native-gesture-handler

    插件安装好,接下来就是了解下如何使用了

    react-navigation主要用到的是三种形式的路由创建,以及路由的嵌套

    import {
      createBottomTabNavigator, // =>创建底部导航
      createStackNavigator, // =>创建通用页面路由
      createDrawerNavigator // => 创建侧面打开(抽屉式)路由
    } from 'react-navigation'
    
    
    创建底部路由

    createBottomTabNavigator API

    createBottomTabNavigator(RouteConfigs, BottomTabNavigatorConfig):

    • RouteConfigs(必选):路由配置对象是从路由名称到路由配置的映射,告诉导航器该路由呈现什么
    • BottomTabNavigatorConfig(可选):配置导航器的路由(如:默认首屏,navigationOptions,paths等)样式(如,转场模式mode、头部模式等)。
    RouteConfigs支持三个参数screen、path以及navigationOptions;
    • screen(必选):指定一个 React 组件作为屏幕的主要显示内容,当这个组件被TabNavigator加载时,它会被分配一个navigation prop。
    • path(可选):用来设置支持schema跳转时使用,具体使用会在下文的有关Schema章节中讲到;
    • navigationOptions(可选):用以配置全局的屏幕导航选项如:title、headerRight、headerLeft等;
    BottomTabNavigatorConfig
    • abBarComponent:指定createBottomTabNavigator的TabBar组件,如果不指定在iOS上默认使用TabBarBottom,在Android平台上默认使用TabBarTop。
    • TabBarBottom与TabBarTop都是react-navigation所支持的组件,要自定义TabBar可以重写这两个组件也可以根据需要自己实现一个;
    • tabBarOptions: 配置TaBar下文会详细讲解;
    • initialRouteName : 默认页面组件,createBottomTabNavigator显示的第一个页面;
    • order: 定义tab顺序的routeNames数组。
    • paths: 提供routeName到path config的映射,它覆盖routeConfigs中设置的路径。
    • backBehavior: 后退按钮是否会导致标签切换到初始tab? 如果是,则设切换到初始tab,否则什么也不做。 默认为切换到初始tab。
    tabBarOptions(tab配置)
    • activeTintColor: 设置TabBar选中状态下的标签和图标的颜色;
    • inactiveTintColor: 设置TabBar非选中状态下的标签和图标的颜色;
    • showIcon: 是否展示图标,默认是false;
    • showLabel: 是否展示标签,默认是true;
    • upperCaseLabel - 是否使标签大写,默认为true。
    • tabStyle: 设置单个tab的样式;
    • indicatorStyle: 设置 indicator(tab下面的那条线)的样式;
    • labelStyle: 设置TabBar标签的样式;
    • iconStyle: 设置图标的样式;
    • style: 设置整个TabBar的样式;
    • allowFontScaling: 设置TabBar标签是否支持缩放,默认支持;
    • safeAreaInset:覆盖的forceInset prop,默认是{ bottom: 'always', top: 'never' },可选值:top | bottom | left | right ('always' | 'never');
    //BottomTabBar.js
    import React, { Component } from 'react';
    import {createBottomTabNavigator} from 'react-navigation';
    import Index from './Index'; //底部菜单页面地址
    import System from './System';  //底部菜单页面地址
    import Mine from './Mine'; //底部菜单页面地址
    
    export default BottomNavigator = createBottomTabNavigator({
      Index:{
        screen:Index 
      },
      System :{
        screen:System 
      },
      Mine :{
        screen:Mine 
      }
    });
    //这样最基本的底部路由就创建好了
    
    //App.js
    import React, { Component } from 'react';
    import { createAppContainer } from 'react-navigation'; //路由容器实例化方法
    import BottomTabBar from './BottomTabBar';
    const Navigator = createAppContainer(BottomTabBar );
    
    //基本路由就算完成
    export default class App extends Component {
      render() {
        return (
             <Navigator />
        );
      }
    };
    
    底部导航添加图标
    //BottomTabBar.js
    import React, { Component } from 'react';
    import {createBottomTabNavigator} from 'react-navigation';
    import Index from './Index'; //底部菜单页面地址
    import System from './System';  //底部菜单页面地址
    import Mine from './Mine'; //底部菜单页面地址
    
    //路由所需要用到的图片,选中跟未选中
    const IndexSelected = require("../assets/icon/index_fous.png");
    const IndexIcon = require("../assets/icon/index.png");
    const SystemSelected = require("../assets/icon/quanzi_fous.png");
    const SystemIcon = require("../assets/icon/quanzi.png");
    const MineSelected = require("../assets/icon/zixun_fous.png");
    const MineIcon = require("../assets/icon/zixun.png");
    
    export default BottomNavigator = createBottomTabNavigator({
      Index: {
        screen: Index,
        navigationOptions: () => ({
          title: '首页',
          tabBarIcon: (({ focused }) => {
            return (
              <Image
                source={focused ? IndexSelected : IndexIcon}
                style={styles.tabbarImage}
              />
            )
          }),
        })
      },
      System: {
        screen: Information,
        navigationOptions: () => ({
          title: '系统',
          tabBarIcon: (({ focused }) => {
            return (
              <Image
                source={focused ? SystemSelected : SystemIcon}
                style={styles.tabbarImage}
              />
            )
          }),
        })
      },
      Mine: {
        screen: AddressList,
        navigationOptions: () => ({
          title: '我的',
          tabBarIcon: (({ focused }) => {
            return (
              <Image
                source={focused ? MineSelected : MineIcon}
                style={styles.tabbarImage}
              />
            )
          }),
        })
      }
    },
      {
        initialRouteName: 'Index', //默认显示底部导航的哪个页面
        tabBarOptions: {
          showIcon: true, //是否显示Icon
          activeTintColor: '#1985EA' //底部选中颜色
        }
      });
    //这样底部的图标也配置完成了
    
    BottomNavigator.navigationOptions = ({navigation})=>{
      //如果我们要对底部导航进行一些动态的配置,我们可以这样操作
      //BottomNavigator是当前我们默认导出的component
      //navigation里面我们可以得到当前路由的名称等等之类的一些东西
      //然后我们可以根据navigation里面拿到的东西进行判断,以获得不同页面不同的展示效果
      //最后return
      return {
      //你要返回的东西
      }
    }
    
    一个App不可能只有底部路由,还有其他页面,所以我们还会用到

    # createStackNavigator API

    createStackNavigator(RouteConfigs, StackNavigatorConfig):

    • RouteConfigs(必选):路由配置对象是从路由名称到路由配置的映射,告诉导航器该路由呈现什么。
    • StackNavigatorConfig(可选):配置导航器的路由(如:默认首屏,navigationOptions,paths等)样式(如,转场模式mode、头部模式等)。
    • 具体配置跟上面创建的大体差不多,也可以点击链接查看具体配置
    //StackNavigator.js
    import React, { Component } from "react";
    import { createStackNavigator } from "react-navigation";
    import BottomNavigator' from ./BottomNavigator';
    import Detail' from ./Detail'; // =>除底部当行以外的其他页面
    import Person' from ./Person'; // =>除底部当行以外的其他页面
    
    //类似一个嵌套路由,把底部路由包裹在Stack中
    export default StackNavigator = createStackNavigator({
      BottomNavigator:{
        screen:BottomNavigator
      }
    },
    Detail:{
        screen:Detail
      }
    },
    Person:{
        screen:Person
      }
    },
      {
        initialRouteName: 'BottomNavigator', //默认显示底部路由
        defaultNavigationOptions: { // =>默认的路由全局样式配置
          // headerBackImage: <BackImage />, //=>自定义返回按钮
          headerStyle: {
            backgroundColor: '#1985EA',
            elevation: 0.5
          },
          headerTitleStyle: {
            color: '#fff',
            // textAlign: "center", //用于android 机型标题居中显示
            // flex: 1
          },
        }
      }
    );
    //这样我们App的一个基本路由框架就算基本完成,剩余的就是到App.js文件,把之前实例化的路由更改下就OK
    
    更改实例化的createAppContainer
    //App.js
    import React, { Component } from 'react';
    import { createAppContainer } from 'react-navigation'; //路由容器实例化方法
    import BottomTabBar from './BottomTabBar';
    import StackNavigator'./StackNavigator';
    
    //const Navigator = createAppContainer(BottomTabBar );
    const Navigator = createAppContainer(StackNavigator); 替换为
    //基本路由就算完成
    export default class App extends Component {
      render() {
        return (
             <Navigator />
        );
      }
    };
    

    记录下使用的心得,方便以后使用查看,如有写都不对的欢迎指正

    相关文章

      网友评论

        本文标题:react-navigation路由常用配置及使用方法

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