React Navigation 更新到版本5已经是非常完善的一套导航管理组件, 提供了Stack , Tab , Drawer 导航方式 , 那么我们应该怎样设计和组合应用他们来构建一个完美的回退栈呢?

1 . 确定APP的整体风格,国外偏好使用Drawer布局, 但到了国内就很少被使用

2. 每个导航也是一个component, 可以作为另外一个导航的一个页面

其他的具体使用参考官网即可

import {createAppContainer} from 'react-navigation';
import {createBottomTabNavigator} from 'react-navigation-tabs';
import * as React from 'react';
import MineTabNavigator from '../screens/Mine/MineTabNavigator';
import DashboardTabNavigator from '../screens/Dashboard/DashboardTabNavigator';
import DeviceTabNavigator from '../screens/Device/DeviceTabNavigator';
import {MaterialTgitopTabNavigator} from '../screens/Organization/OrgTreeScreen';
import {createStackNavigator} from 'react-navigation-stack';
import NotificationTabNavigator from '../screens/Notification/NotificationTabNavigator';
import SplashScreen from '../screens/Splash/SplashScreen';
import LoginScreen from '../screens/Mine/Login/LoginScreen';
import Svg from '../components/Svg/svg';/**
* 配置底部标签
*/
const Tab = createBottomTabNavigator({
//每一个页面的配置
DashboardScreen: {
screen: DashboardTabNavigator,
navigationOptions: {
//stackNavigator的属性
gestureResponseDistance: {horizontal: 300},
headerBackTitle: null,
headerStyle: {backgroundColor: '#FFFFFF'},//导航栏的样式
//tab 的属性
tabBarLabel: '首页',
tabBarIcon: ({focused, horizontal, tintColor}) => (
<Svg icon="abb_home_24" color={tintColor}/>
),
},
},
NotificationTab: {
screen: NotificationTabNavigator,
navigationOptions: {
//stackNavigator的属性
headerTitle: '通知',
gestureResponseDistance: {horizontal: 300},
headerBackTitle: null,
headerStyle: {backgroundColor: '#FFFFFF'},//导航栏的样式
headerTitleStyle: {
color: '#686868',
fontSize: 16,
fontFamily: 'ABBvoiceCNSG-Regular',
},
//tab 的属性
tabBarLabel: '消息',
tabBarIcon: ({focused, horizontal, tintColor}) => (
<Svg icon="abb_alarm-bell_24" color={tintColor}/>
),
},
},
MineTab: {
screen: MineTabNavigator,
navigationOptions: {
//stackNavigator的属性
headerTitle: '我的',
gestureResponseDistance: {horizontal: 300},
headerBackTitle: null,
headerStyle: {
backgroundColor: '#FFFFFF',
},//导航栏的样式
headerTitleStyle: {
color: '#686868',
fontSize: 16,
fontFamily: 'ABBvoiceCNSG-Regular',
height: 48,
},
//tab 的属性
tabBarLabel: '我的',
tabBarIcon: ({focused, horizontal, tintColor}) => (
<Svg icon="abb_user_24" color={tintColor}/>
),
},
}, }, {
//设置TabNavigator的位置
tabBarPosition: 'bottom',
//是否在更改标签时显示动画
animationEnabled: true,
//是否允许在标签之间进行滑动
swipeEnabled: true,
//按 back 键是否跳转到第一个Tab(首页), none 为不跳转
backBehavior: 'false',
//设置Tab标签的属性 tabBarOptions: {
//Android属性
upperCaseLabel: false,//是否使标签大写,默认为true
//共有属性
showIcon: true,//是否显示图标,默认关闭
showLabel: true,//是否显示label,默认开启
activeTintColor: '#3366FF',//label和icon的前景色 活跃状态下(选中)
inactiveTintColor: '#1F1F1F',//label和icon的前景色 活跃状态下(未选中)
style: { //TabNavigator 的背景颜色
backgroundColor: 'white',
height: 55,
},
indicatorStyle: {//标签指示器的样式对象(选项卡底部的行)。安卓底部会多出一条线,可以将height设置为0来暂时解决这个问题
height: 0,
},
labelStyle: {//文字的样式
fontSize: 13,
marginTop: -5,
marginBottom: 5,
},
iconStyle: {//图标的样式
marginBottom: 5,
},
},
}); Tab.navigationOptions = ({navigation}) => ({
header: null,
}); const RootStack = createStackNavigator(
{
Splash: SplashScreen,
Tab: Tab,
Login: LoginScreen,
Logout: LogoutScreen,
Notification: NotificationScreen,
//-------------------
},
{
initialRouteName: 'Splash',
// mode: 'modal',
// // 用于设置安卓卡片式跳转
// // transitionConfig: () => ({
// // screenInterpolator: StackViewStyleInterpolator.forHorizontal,
// // }),
// navigationOptions: () => ({
// gesturesEnabled: true,
// }),
// // 默认导航头样式设置
// defaultNavigationOptions: {
// header: null,
// },
headerLayoutPreset: 'center',
},
); export default AppContainer = createAppContainer(RootStack);

React Navigation / React Native Navigation 多种类型的导航结合使用,构造合理回退栈的更多相关文章

  1. React Navigation & React Native & React Native Navigation

    React Navigation & React Native & React Native Navigation React Navigation https://facebook. ...

  2. React的React Native

    React的React Native React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React ...

  3. React native中DrawerNavigator,StackNavigator,TabNavigator导航栏使用

    import React from 'react'; import { View, Text,Button } from 'react-native'; import { DrawerNavigato ...

  4. 一次掌握 React 与 React Native 两个框架

    此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React 与 React Native 结合学习的方法. 1. 软件开发语言与框架的学习本质 我 ...

  5. 小谈React、React Native、React Web

    React有三个东西,React JS 前端Web框架,React Native 移动终端Hybrid框架,React Web是一个源码转换工具(React Native 转 Web,并之所以特别提出 ...

  6. react - 解刨组件的多种写法

    一,原始的createClass写法 对于写react组件,很多人第一印象往往是createClass,这是因为createClass是react组件最原始的写法,基本每个学react的人都是接触这种 ...

  7. React 与 React Native 底层共识:React 是什么

    此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React 与 React Native 结合学习的方法,此小节主要介绍 React 的底层原理与 ...

  8. 《React Native 精解与实战》书籍连载「React 与 React Native 简介」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  9. 用react-service做状态管理,适用于react、react native

    转载自:https://blog.csdn.net/wo_shi_ma_nong/article/details/100713151 . react-service是一个非常简单的用来在react.r ...

随机推荐

  1. el-switch 初始值(默认值)不能正确显示状态问题

    <el-table-column align="center" label="状态">       <template slot-scope= ...

  2. JavaScript基础对象创建模式之私有属性和方法(024)

    JavaScript没有特殊的语法来表示对象的私有属性和方法,默认的情况下,所有的属性和方法都是公有的.如下面用字面声明的对象: var myobj = { myprop: 1, getProp: f ...

  3. JQuery 优缺点略谈

    1.jQuery实现脚本与页面的分离 ; 2.最少的代码做最多的事情; 3.性能; 在大型JavaScript框架中,jQuery对性能的理解最好.尽管不同版本拥有众多新功能,其最精简版本只有18KB ...

  4. 恕我直言你可能真的不会java第11篇-Stream API终端操作

    一.Java Stream管道数据处理操作 在本号之前写过的文章中,曾经给大家介绍过 Java Stream管道流是用于简化集合类元素处理的java API.在使用的过程中分为三个阶段.在开始本文之前 ...

  5. 版本管理工具(git)

    Git是一个开源的分布式版本控制系统 工作区: 电脑目录中,git_test文件夹就是一个工作区. 版本库: 在进行git操作的时候,会生成一个隐藏目录.git,这是git的版本库,其中stage(或 ...

  6. vs2017+opencv3.4.0的配置方法

    1.尝试了这个博客的方法: https://blog.csdn.net/u014574279/article/details/50909425/ 结果: 无法打开文件“opencv_ml2410d.l ...

  7. WireGuard 教程:WireGuard 的工作原理

    原文链接:https://fuckcloudnative.io/posts/wireguard-docs-theory/ WireGuard 是由 Jason Donenfeld 等人用 C 语言编写 ...

  8. 让MySQL为我们记录执行流程

    让MySQL为我们记录执行流程   我们可以开启profiling,让MySQL为我们记录SQL语句的执行流程   查看profiling参数 shell > select @@profilin ...

  9. P3295 萌萌哒 题解

    题目 一个长度为n的大数,用\(S_1,S_2,S_3...S_n\)表示,其中\(S_i\)表示数的第\(i\)位,\(S_1\)是数的最高位,告诉你一些限制条件,每个条 件表示为四个数,\(l_1 ...

  10. [POJ3977] Subet(二分枚举)

    解题报告 前置知识:折半查找法(二分法) 顾名思义,折半就是把一组数据(有序)分成两半,判断我们要找的key值在哪一半当中,不断重复该操作直至找到目标key值,这玩意说白了就是二分的另一个名字. 解决 ...