使用react-navigation搭建APP页面导航架构

一、前言

接触react-navigation已有半年,从使用体验来说,它的效果是非常棒的,API的学习和使用也比较简单易用,所以react-native社区主推的导航库就是react-navigation。使用react-navigation可以快速搭建APP的页面导航架构,而且它的配置灵活,页面导航效果可以达到原生端的体验。

二、页面导航架构搭建

一般APP都会有这么几个页面,启动页、注册页、登录页、主页,我们可以将这四个页面作为SwichNavigator的路由,SwitchNavigator 的用途是一次只显示一个页面,实际上这些页面里面还要关联到其他页面,比如注册页面会关联到协议页,怎么处理这种情况呢?很容易,在SwichNavigator嵌套一个StackNavigator,注册页和协议页组成一个StackNavigator,然后这个StackNavigator又是SwichNavigator的一个路由,这样子实现页面的嵌套了。如此,整个APP的页面导航可以分为四个页栈,启动页StackNavigator、注册页StackNavigator、登录页StackNavigator、主页StackNavigator。

由此形成的APP页面导航架构如下:

 

三、代码实现

1、APP根导航器SwitchNavigator

import {
    createSwitchNavigator
} from 'react-navigation';

import LaunchNavigator from './LaunchNavigator';
import LoginNavigator from './LoginNavigator';
import RegisterNavigator from './RegisterNavigator';
import MainNavigator from './MainNavigator';


/**
 * created by chenlw on 2019/06/01
 * work:结合导航的身份验证流程。
 *
 *  身份验证流程使用SwitchNavigator作为APP的顶级导航器(AppRootNavigator),目前有4个切换分支,其中分支还可能包含其他页面的导航
 * (1)Launch:启动页面
 * (2)Login:登录页面(StackNavigator)
 * (3)Main:主页(StackNavigator)
 * (4)AppSetting:APP配置页面(StackNavigator)
 */
const AppRootNavigator = createSwitchNavigator(
    {
        Launch: {
            //启动页面
            screen: LaunchNavigator,
        },
        Login: {
            //登录页面
            screen: LoginNavigator,
        },
        Main: {
            //主页
            screen: MainNavigator,
        },
        Register: {
            //APP配置页面
            screen: RegisterNavigator,
        },
    },
    {
        initialRouteName: "Launch"
    }
);
export default AppRootNavigator;

 

2、启动页StackNavigator

import {
    createStackNavigator
} from 'react-navigation';

import Launch from './../pages/Launch';


import GlobalNavigationOptions from './GlobalNavigationOptions';

/**
 * created by chenlw on 2019/06/01
 */
export default createStackNavigator(
    {
        Launch: {
            screen: Launch,
        }
    },
    {
        initialRouteName: 'Launch',
        navigationOptions: GlobalNavigationOptions,
        headerLayoutPreset: 'center',   //将标题居中
        //headerMode: 'float',            //指定页眉的呈现方式
    }
);

 

3、注册页StackNavigator

import {
    createStackNavigator
} from 'react-navigation';

import Protocol from './../pages/Protocol';
import Register from './../pages/Register';
import GlobalNavigationOptions from "./GlobalNavigationOptions";

/**
 * created by chenlw on 2019/06/01
 */
export default createStackNavigator(
    {
        Register: {
            screen: Register,
        },
        Protocol: {
            screen: Protocol,
        },
    },
    {
        initialRouteName: 'Register',
        navigationOptions: GlobalNavigationOptions,
        headerLayoutPreset: 'center',   //将标题居中
    }
);

4、登录页StackNavigator

import {
    createStackNavigator
} from 'react-navigation';

import Login from './../pages/Login';


import GlobalNavigationOptions from './GlobalNavigationOptions';

/**
 * created by chenlw on 2019/06/01
 */
export default createStackNavigator(
    {
        Login: {
            screen: Login,
        }
    },
    {
        initialRouteName: 'Login',
        navigationOptions: GlobalNavigationOptions,
        headerLayoutPreset: 'center',   //将标题居中
        //headerMode: 'float',            //指定页眉的呈现方式
    }
);

 

5、主页栈

import {
    createStackNavigator
} from 'react-navigation';

import Main from './../pages/Main';
import ServiceDetails from './../pages/ServiceDetails';
import Settings from './../pages/Settings';
import GlobalNavigationOptions from "./GlobalNavigationOptions";


/**
 * created by chenlw on 2019/06/01
 * work:封装主页导航组件
 */
export default createStackNavigator(
    {
        Main: {
            screen: Main,
        },
        ServiceDetails: {
            screen: ServiceDetails,
        },
        Settings: {
            screen: Settings,
        },

    },
    {
        initialRouteName: 'Main',
        navigationOptions: GlobalNavigationOptions,
        headerLayoutPreset: 'center',   //将标题居中
    }
);

 

四、页面导航效果图

 

源码地址:

https://github.com/chenliwu/MyRNNavigationDemo

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值