React-Native中禁用Navigator手势返回的示例代码


Posted in Javascript onSeptember 09, 2017

在React-Native开发中,经常会用到导航。导航做什么用的呢,简单点说就是页面跳转。

个项目中,肯定有很多的页面要跳来跳去的,RN就给我们提供了Navigator组件,可以很好的管理页面的跳转。

在所有工作做完之后,发现有个bug!在从第一个界面跳转到下一个界面后,如果从屏幕左边向右滑,或者从上面想下滑,你会发现一个神奇的事情,那就是页面会通过滑动而返回到上一个界面。这让我们很尴尬了,本来打算禁止跳转返回的,或者返回时还要做些什么处理的,结果啥都没做,直接返回,可以说,这个功能有点适得其反了。

于是为了解决这个问题,到处找答案,官网没有说,论坛也没人回答。于是放置了很久很久,没想到在今天的而然查找下,终于找到解决方案了。

方案主要分三种:

1,自己定义个configureScene:

const NoBackSwipe = { 
 ...Navigator.SceneConfigs.HorizontalSwipeJump, 
  gestures: { 
   pop: {} 
  } 
};

然后在Navigator标签下使用

<Navigator  
   initialRoute={{Component:'xxx', name:'xxx', index:0, configure: NoBackSwipe}} 
   renderScene={this.renderScene.bind(this)} 
   configureScene={(route,routeStack)=>{ 
    return NoBackSwipe 
   }} 
  />

这里主要是处理了pop,其中还有jumpback,jumpforward的

2,如果你都不要返回处理的,直接将gestures都改成{}或者null

configureScene(route, routeStack){ 
 let configure = Navigator.SceneConfigs.PushFromRight; 
 switch(route.configure){ 
  case Consts.FloatFromLeft: 
   configure = Navigator.SceneConfigs.FloatFromLeft; 
   break; 
  case Consts.FloatFromBottom: 
   configure = Navigator.SceneConfigs.FloatFromBottom; 
   break; 
 } 
 return { 
  ...configure, 
  gestures:{}//或者改成null 
 }; 
}

然后使用也是一样: 

<Navigator initialRoute={{Component:'xxx', name:'xxx', index:0, configure: NoBackSwipe}} 
    configureScene={this.configureScene.bind(this)} 
    renderScene={this.renderScene.bind(this)} 
    onStartShouldSetResponder={()=>false}/>

我就是用的第二种。

3,还有一种,是直接改源码,在项目目录下找到路径:

/node_modules/react-native/Libraries/CustomComponents/Navigator/Navigator.js

里面有一段代码,去掉pop就可以了

var GESTURE_ACTIONS = [ 
 'pop',//把这个去掉就可以了 
 'jumpBack', 
 'jumpForward', 
];

这种直接修改源码的不推荐使用,因为每当你要升级RN或者做其他调整时,重新下载下来又得改,还是上面两种比较靠谱。

以上就是今天的大发现,终于解决滑动返回的问题了~

资料参考:How to disable back swipe gesture in react native navigator

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript window.opener的用法分析
Apr 07 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
Jul 31 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
angular.js+node.js实现下载图片处理详解
Mar 31 Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
JavaScript ES2019中的8个新特性详解
Feb 20 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
May 12 Javascript
vue实现在v-html的html字符串中绑定事件
Oct 28 Javascript
highcharts.js数据绑定方式代码实例
Nov 13 Javascript
解决vue 退出动画无效的问题
Aug 09 Javascript
js实现音乐播放控制条
Sep 09 #Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
Sep 08 #Javascript
详解vue2 $watch要注意的问题
Sep 08 #Javascript
Express + Session 实现登录验证功能
Sep 08 #Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 #Javascript
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 #jQuery
JavaScript实现开关等效果
Sep 08 #Javascript
You might like
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
php生成短域名函数
2015/03/23 PHP
PHP实现搜索相似图片
2015/09/22 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
google地图的路线实现代码
2009/08/20 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
python中文编码问题小结
2014/09/28 Python
玩转python爬虫之正则表达式
2016/02/17 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
python 制作本地应用搜索工具
2021/02/27 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
大学毕业感言
2014/01/10 职场文书
导游实习生自荐书
2014/01/28 职场文书
会计岗位职责范本
2014/03/07 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
检讨书格式
2015/05/07 职场文书
班主任培训研修日志
2015/11/13 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers
Android存储中最基本的文件存储方式
2022/04/30 Java/Android