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. 动力节点 mysql 郭鑫 34道经典的面试题三

    1.第十五题 15.列出受雇日期早于其直接上级的所有员工编号.姓名.部门名称 思路一:第一步将emp a看成员工表,将emp b 看成领导表,员工表的mgr字段应该等于领导表的主键字段 mysql&g ...

  2. 四层发现-TCP和UDP发现简介

    虽然这里使用到了端口发现,但是四层发现阶段并不对端口进行解析,而是通过端口进行对ip是否存活的判断. 这里是对主机的发现,而不是对端口的识别. 四层发现的结果比三层发现的结果更加精确,基本不会被防火墙 ...

  3. Netdiscover

    Netdiscover不仅支持主动arp检测,还支持被动的arp检测,即把网卡设置为混杂模式,收取所有局域网内的arp广播数据包,从而判断活着的ip. 主动发现命令格式:netdiscover  -i ...

  4. VM363:1 Uncaught SyntaxError: Invalid or unexpected token

    此报错主要是因为json字符串转json对象时,json字符串中出现特殊字符(如:换行符)报错. json字符转json对象(如下写则报错) 更改后 参考地址: https://www.cnblogs ...

  5. 入门大数据---Flume整合Kafka

    一.背景 先说一下,为什么要使用 Flume + Kafka? 以实时流处理项目为例,由于采集的数据量可能存在峰值和峰谷,假设是一个电商项目,那么峰值通常出现在秒杀时,这时如果直接将 Flume 聚合 ...

  6. 【Python3爬虫】模拟实现小牛在线登录过程

    一.站点分析 小牛在线的登录入口地址为:https://www.xiaoniu88.com/user/login. 用户登录时除了需要输入用户名和密码,还要输一个验证码.我们可以先任意输入一个用户名. ...

  7. IA-32指令解析详解

    IA-32指令解析详解 0x00 前言 这段时间忙于考试,信息论和最优化,还有算法分析,有点让人头大.期间花了几天看SEH机制,能明白个大概,但是对于VC++对于SHE的包装似乎还是不是很明白,发现逆 ...

  8. 线下---复习day02

    目录 1 后续课程安排 2 作业讲解 3 python中的魔法方法 setattr,getattr,setitem,getitem演示 with 上下文管理器 eq 4 cookie,session, ...

  9. 大型Java进阶专题(七) 设计模式之委派模式与策略模式

    前言 ​ 今天开始我们专题的第七课了.本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式.策略模式让你 ...

  10. eShopOnContainers 知多少[11]:服务间通信之gRPC

    引言 最近翻看最新3.0 eShopOncontainers源码,发现其在架构选型中补充了 gRPC 进行服务间通信.那就索性也写一篇,作为系列的补充. gRPC 老规矩,先来理一下gRPC的基本概念 ...