ReactNavigation 重置路由栈的两种方法 以及SwitchNavigator不处理回退操作

本文主要是介绍ReactNavigation 重置路由栈的两种方法 以及SwitchNavigator不处理回退操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们在项目中常常有这样的需求 , 给app添加一个广告业/启动页/引导页/登录页等等, 之后进入app的主页面 , 前面的 广告业/启动页/引导页 不提供入口,并且按返回键也不会回到那个页面. 一般我们会跳转到主页之后重置路由,今天提供两种方法来实现.

首先是跳转之后重置路由:

//首先导入NavigationActions
import {NavigationActions} from 'react-navigation';//然后设置新路由的第0个路由为home 
const resetAction = NavigationActions.reset({index: 0,actions: [NavigationActions.navigate({routeName: 'home'}),],
});//执行重置路由方法
this.props.navigation.dispatch(resetAction)

放上 demo中的源码以供参考:

/*** Created by 卓原 on 2018/3/2.* zhuoyuan93@gmail.com*/
import React from 'react';
import {SafeAreaView,View,Text,StyleSheet
} from 'react-native';
import {NavigationActions} from 'react-navigation';const resetAction = NavigationActions.reset({index: 0,actions: [NavigationActions.navigate({routeName: 'home'}),],
});
export default class WelcomePage extends React.Component {constructor(props) {super(props);this.state = {time: 2}}componentDidMount() {/*this.timeGoHome = setTimeout(() => {this.props.navigation.navigate('home')}, 2000);*/this.timeGoHome = setInterval(() => {if (this.state.time === 0) {this.props.navigation.navigate('home');this.props.navigation.dispatch(resetAction);this.timeGoHome && clearTimeout(this.timeGoHome);} else {this.setState({time: this.state.time - 1})}}, 1000);}render() {return (<View style={styles.container}><Text>{`欢迎,进入倒计时:${this.state.time}秒`}</Text></View>)}componentWillUnmount() {this.timeGoHome && clearTimeout(this.timeGoHome);//this.timeGoHome && this.timeGoHome.clear();console.log('欢迎页面-componentWillUnmount')}
}const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center'}
})

之后我们的home 也就是我们app常规的主页面就在路由栈顶了,返回键自然不生效了.
然后看第二种方法.
先介绍一下 : SwitchNavigator,
SwitchNavigator是一次只显示一个屏幕。默认情况下,它不处理回退操作,并在您切换时将路由重置为默认状态.
我们SwitchNavigator通过使用navigate动作在路线之间切换。

SwitchNavigator(RouteConfigs, SwitchNavigatorConfig)
RouteConfigs
路由CONFIGS对象是从路由名称映射到一个路由配置,它告诉导航以呈现该路线什么,参见StackNavigator。SwitchNavigatorConfig
有几个选项会传递给底层路由器来修改导航逻辑:initialRouteName - 第一次加载时初始选项卡路由的routeName。
resetOnBlur - 切换离开屏幕时,重置所有嵌套导航器的状态。默认为true。
paths - 提供routeName到path config的映射,它覆盖routeConfigs中设置的路径。
backBehavior - 后退按钮是否会导致标签切换到初始路由?如果是,则设置为initialRoute,否则none。默认为none行为。
import { StackNavigator, SwitchNavigator } from 'react-navigation';
//SwitchNavigator在1.3.0才有// Implementation of HomeScreen, OtherScreen, SignInScreen, LoadingScreen
// goes here.
const AppStackNavigator = StackNavigator({home: {screen: Tab,navigationOptions: {header: null}},welcome: {screen: WelComePage,navigationOptions: {header: null}},NewPage: {screen: NewPage,navigationOptions: {header: null}}});
//welcome为欢迎页 
export default SwitchNavigator({welcome: WelComePage,App: AppStackNavigator,},{initialRouteName: 'welcome',}
);

通过SwitchNavigator 来实现切换路由,可以达到返回键不会回退回去的目的.
这时,我们直接跳转就可以了:

this.props.navigation.navigate('App');

这篇关于ReactNavigation 重置路由栈的两种方法 以及SwitchNavigator不处理回退操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026166

相关文章

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶