React Navigation / React Native Navigation 多种类型的导航结合使用,构造合理回退栈
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 多种类型的导航结合使用,构造合理回退栈的更多相关文章
- React Navigation & React Native & React Native Navigation
React Navigation & React Native & React Native Navigation React Navigation https://facebook. ...
- React的React Native
React的React Native React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React ...
- React native中DrawerNavigator,StackNavigator,TabNavigator导航栏使用
import React from 'react'; import { View, Text,Button } from 'react-native'; import { DrawerNavigato ...
- 一次掌握 React 与 React Native 两个框架
此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React 与 React Native 结合学习的方法. 1. 软件开发语言与框架的学习本质 我 ...
- 小谈React、React Native、React Web
React有三个东西,React JS 前端Web框架,React Native 移动终端Hybrid框架,React Web是一个源码转换工具(React Native 转 Web,并之所以特别提出 ...
- react - 解刨组件的多种写法
一,原始的createClass写法 对于写react组件,很多人第一印象往往是createClass,这是因为createClass是react组件最原始的写法,基本每个学react的人都是接触这种 ...
- React 与 React Native 底层共识:React 是什么
此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React 与 React Native 结合学习的方法,此小节主要介绍 React 的底层原理与 ...
- 《React Native 精解与实战》书籍连载「React 与 React Native 简介」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
- 用react-service做状态管理,适用于react、react native
转载自:https://blog.csdn.net/wo_shi_ma_nong/article/details/100713151 . react-service是一个非常简单的用来在react.r ...
随机推荐
- 并发02--JAVA内存模型
在并发编程中,需要解决两个问题:线程间如何通信&线程间如何同步 线程同步:控制不同线程操作顺序的机制 解决这两个问题的方案有两种:共享内存&消息传递 共享内存:通过使用共享内存,隐式通 ...
- GDI+ 双缓冲实现
早前曾为此问题在CSDN发帖求助(GDI+ 如何使用双缓冲绘制图像),得到了一个GDI+下较可行的方法,虽然绘制效果比直接绘制要好一些,不过还不能跟GDI的双缓冲方式比肩. 现在,我终于找到了一个 ...
- JavaScript基础对象创建模式之声明依赖模式(023)
运用了命名空间(Namespace)模式后, 就可以使用一些JavaScript库了,比如YAHOO作用YUI2库的全局对象,可以通过 YAHOO.util.Dom 和 YAHOO.util.Even ...
- 数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表;Oracle文件损坏处理……
热门资讯 1.Stackoverflow 2020年度报告出炉!开发者最喜爱的数据库是什么?[摘要]2020年2月,近6.5万名开发者参与了 Stackoverflow 的 2020 年度调查,这份报 ...
- springsecurity简单学习
一.初识SpringSecurity 在springboot项目中加入spring security. 1.在pom.xml中加入依赖 <dependency> <groupId&g ...
- 听说你还不知道CompletableFuture?
java8已经在日常开发编码中非常普遍了,掌握运用好它可以在开发中运用几行精简代码就可以完成所需功能.今天将介绍CompletableFuture的在生产环境如何使用实践.CompletableFut ...
- 内存节省到极致!!!Redis中的压缩表,值得了解...
redis源码分析系列文章 [Redis源码系列]在Liunx安装和常见API 为什么要从Redis源码分析 String底层实现——动态字符串SDS 双向链表都不懂,还说懂Redis? 面试官:说说 ...
- python学习笔记之函数(方法)(四)
一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在C中叫function,在Java里面叫做method. 定义: ...
- 新手用Python运行selenium的常见问题
1.更换Python版本 打开pycharm,点击 file——setting——project项目名——project Interpreter,点击右侧的设置,如下图 选择新Python版本的安装路 ...
- vue中v-model父子组件通信
有这样的需求,父组件绑定v-model,子组件输入更改父组件v-model绑定的数值.是怎么实现的呢? 实际上v-model 只是语法糖而已. <input v-model="inpu ...