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

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创