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 相关文章推荐
jquery中实现标签切换效果的代码
Mar 01 Javascript
把jquery 的dialog和ztree结合实现步骤
Aug 02 Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 Javascript
javascript表单验证大全
Aug 12 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
JavaScript 中 avalon绑定属性总结
Oct 19 Javascript
js实现固定宽高滑动轮播图效果
Jan 13 Javascript
jquery+css实现侧边导航栏效果
Jun 12 jQuery
微信小程序利用swiper+css实现购物车商品删除功能
Mar 06 Javascript
简谈创建React Component的几种方式
Jun 15 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 Javascript
原生JS实现拖拽效果
Dec 04 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
11个PHPer必须要了解的编程规范
2014/09/22 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
大专自我鉴定范文
2013/10/01 职场文书
法学专业应届生求职信
2013/10/16 职场文书
运动会表扬稿大全
2014/01/16 职场文书
初三政治教学反思
2014/01/30 职场文书
公益活动邀请函
2014/02/05 职场文书
一名老师的自我评价
2014/02/07 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL