react navigation goBack()返回到任意页面(不集成redux) 一
方案一:
一、适用场景:
在app端开发的时候,相反回到某一个页面的时候保持跳转页面的所有状态不更新,也就是说不触发新的生命周期、
例如:A——>B——>C——>D
要想从D页面直接返回到B页面又保持B页面的所有状态,不去触发B页面的生命周期,
有人说可以用:this.props.navigation.navigate,是可以实现跳转,但是这样会触发B页面的新的生命周期
所有用this.props.navigation.goBack('接受参数');
二、但是需要注意的是 接收的参数问题
1.官网goBack()用法react navigation官网
2.goBack的参数为页面路由的key, 这个key是系统随机分配的,每一次加载的时候分配的都是不一样的; 而不是手动设置的routeName, 所以参数填routeName无法跳转, goBack如果不带参数(即key为undefined)会默认返回上一个页面
goBack(key)这个key是指:
从路由值为key这个路由页面返回,
而不是返回到值为key的页面
也就是说从D返回到B,这里的key值并不是B页面的路由key值,而是,C的key值,因为B是由C返回的,所以此处的key值应该为C页面的key值
所以要想从D返回到B页面应该是
this.props.navigation.goBack("C页面的key")
because react-navigation only provide method goBack(key), it's go back from key, not go back to key.
————————————————
版权声明:本文为CSDN博主「傻小胖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34645412/article/details/82424560
方案二:
假如A ->B ->C ->D->E 顺序入栈,我们可以在navigate的时候将本页面的key作为参数,传递个先一个页面,这样下一个页面就拥有之前页面的key了,就可以完成返回。
A ->B{A.key} ->C {A.key,B.key}->D{A.key,B.key,C.key}->E{A.key,B.key,C.key,D.key}
但是这里有个问题,这种会导致key有一个错位,就是说如果你想从E页面返回到A.
你要goback(params.keys.B);
如果只是返回一层还是使用goback();
处理错位问题 我们只需要将key的名字改成上一个页面的名字就可以了。
代码如下:
this.props.navigation.navigate('B',{keys:{ A_key:this.props.navigation.state.key,}});
1
这样就可以直接使用A_key 返回A页面了
this.props.navigation.navigate('C',{
data:rowData,
keys:{...this.props.navigation.state.params.keys,B_key:this.props.navigation.state.key}
})
this.props.navigation.goBack(this.props.navigation.state.params.keys. A_key)
方案三:
react navigation默认是使用key作为goback的参数进行返回的,这个key是一个动态生成的,而不是我们定义的routeName。
网上也有很多方法有的说更改源码,有的说是集成redux。更改源码的方式我也尝试过但是如果开启滑动返回属性,很容易就卡死。集成redux是一个不错的方式,但对于新手来说redux的模式还是太过于复杂,况且redux的强大在于数据流的控制,仅仅一个因为一个返回就去学一个这么大的框架,也太耗时了。
今天我们不借助任何第三方框架,不修改源码,也是可以做到,返回任意界面的。
方案一(NEW 推荐):
“react-navigation”: “^1.5.11”版本中发现页面navigationOptions中打印的navigation是全局的而在页面中通过this.props.navigation中打印的是当前页面的navigation。因此我们可以利用这个全局的navigation然后获取到全局的路由栈。
static Navigation_routers;
static navigationOptions = {
header:({navigation}) =>{
return <Header navigation = {navigation}
centerTxt = {'标题'}
renderRightView = {()=>{
return <TouchableOpacity activeOpacity={1} onPress={() => {
let {state:{routes}} = navigation;
console.log('RealNameIdentification navigation',navigation)
console.log('routes',routes);
Navigation_routers = routes;//保存全局的路由
let goToLogin = routes[routes.length-1].params&&routes[routes.length-1].params.login;
goToLogin&&goToLogin();
}}>
<View style={{width:SCALE(80),height:SCALE(42),justifyContent:'center'}}>
<Text style={{fontSize:FONT(30/2),color:'#0094ff'}}>登录</Text>
</View>
</TouchableOpacity>}
}
/>
}
};
然后在基类中写一个函数如下:
//react navigation返回任意页面
goBackPage(routers,PageName){
for(let i=0;i<routers.length;i++){
if(routers[i].routeName==PageName){
if(i+1==routers.length){
this.props.navigation.goBack(null);
return;
}
console.log('执行了这里 返回'+PageName+":",routers[i].key);
this.props.navigation.goBack(routers[i+1].key);
return;
}
}
};
使用如下:
//第一个参数全局路由 第二个参数要跳转的页面(名字为路由中注册的名称)
super.goBackPage(Navigation_routers,PageName);
支持android&&ios
代码:https://github.com/wuyunqiang/RNApp
亲测有效哦!
————————————————
版权声明:本文为CSDN博主「WYQ_XQ」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014041033/article/details/77880400
react navigation goBack()返回到任意页面(不集成redux) 一的更多相关文章
- react navigation goBack()返回到任意页面(不集成redux) 二
实现思路: A -- > B (获取A的key值,传至C)-- >C(获取B传来的A页面key值,传至D) -- >D(获取C传来的A页面key值&C页面的key值,传至下一 ...
- React Native 开发豆瓣评分(三)集成 Redux
什么是 redux redux 是一个用于管理 js 应用状态(state)的容器.比如组件 A 发生了变化,组件 B 要同时做出响应.常见的应用场景就是用户的登录退出操作:未登录状态,个人中心显示登 ...
- h5 网络断网时,返回上一个页面 demo (与检测网络代码相结合,更直观看到结果)
页面一: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...
- 前端知识--mulline框架,返回到前一个页面,并且刷新前一个页面
最近在写项目的时候,遇到了这样一个问题,在第二页面修改完了数据之后,点击返回按钮的时候,第一个页面要返显出第一个页面的数据,这想想其实也不是很难,但是,难就难在,这两个页面是同时打开的.关闭了一个页面 ...
- Facebook力推导航库:React Navigation使用详解
本文来自Songlcy投稿:文章地址:http://blog.csdn.net/u013718120/article/details/72357698 一.开源库介绍 今年1月份,新开源的react- ...
- react-native 学习 ----- React Navigation
很久没有的登陆博客园了,密码都是找回的,从当年的大学生已经正常的走上了程序员的道路,看到之前发的博客还是写的android,现在自己已经在使用了react-native了. 大学毕业了,做了java后 ...
- [RN] 04 - React Navigation
react-navigation和react-router的对比: 支持的平台: react-navigation: react-native react-router: react-native.r ...
- React Native常用组件之TabBarIOS、TabBarIOS.Item组件、Navigator组件、NavigatorIOS组件、React Navigation第三方
以下内容为老版本React Native,faceBook已经有了新的导航组件,请移步其他博客参考>>[我是传送门] 参考资料:React Navigation react-native ...
- 解决webview调用 goBack() 返回上一页自动刷新闪白的情况
问题是:重写了onKeyDown()方法使其goBack(),但是遇到的问题是,每次进入webview再次返回原始页面的时候,中间会有一个闪白的出现. 试了好多网上的方法,发现都是扯淡. 后来意识到, ...
随机推荐
- java 如何实现文件变动的监听
获取修改时间 long lastTime = file.lastModified(); 原文链接:https://blog.csdn.net/liuyueyi25/article/details/79 ...
- App支付宝登录授权
一.在支付宝开放平台申请App应用,并且配置后台信息 https://openhome.alipay.com/platform/appManage.htm#/apps 填写自己的申请信息 添加应用功能 ...
- 201871010105-曹玉中《面向对象程序设计(java)》第十七周学习总结
201871010105-曹玉中<面向对象程序设计(java)>第十七周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...
- 多规格商品SKU 组件封装
前言 做电商项目呢,离不开多规格商品,SKU 也是弄了许久才搞出来,主要是多层级的联动关系,用ID和库存来判断是否是按钮禁止状态 下面就放下代码: 以封装的小程序为例: WXML: <view ...
- Bind+DLZ构建企业智能DNS/DNS
Bind+DLZ构建企业智能DNS 目录:一.简介二.服务规划三.安装BIND及基本环境四.配置Bind-View-DLZ-MYSQL五.添加相关记录并进行测试六.配置从DNS七.补充 一.简介: ...
- 在Ubuntu 18.04系统中蓝牙鼠标连接失败问题的解决
2018-08-22 16:00:35作者:谖瓞稿源:linux站 如果你在Ubuntu 18.04操作系统中有蓝牙鼠标连接失败问题,那就参考下面的解决方法处理. 解决方法 首先在系统终端下输入: b ...
- Uva 10129 Play on Words(欧拉路)
一些秘密的门包含一个非常有趣的单词拼图.考古学家们必须解决的问题 它打开那门.因为没有其他的方式来打开大门,这个谜是非常重要的 我们. 每扇门上都有大量的磁性板.每一个盘子上都有一个字 它.板块必须以 ...
- dup和dup2函数简单使用
dup函数 头文件和函数原型: #include <unistd.h> int dup(int oldfd); dup函数是用来打开一个新的文件描述符,指向和oldfd同一个文件,共享文件 ...
- AcWing:144. 最长异或值路径(dfs + 01字典树)
给定一个树,树上的边都具有权值. 树中一条路径的异或长度被定义为路径上所有边的权值的异或和: ⊕ 为异或符号. 给定上述的具有n个节点的树,你能找到异或长度最大的路径吗? 输入格式 第一行包含整数n, ...
- 【知识库】-数据库_MySQL常用SQL语句语法大全示例
简书作者:seay 文章出处: 关系数据库常用SQL语句语法大全 Learn [已经过测试校验] 一.创建数据库 二.创建表 三.删除表 四.清空表 五.修改表 六.SQL查询语句 七.SQL插入语句 ...