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 相关文章推荐
通过修改referer下载文件的方法
May 11 Javascript
js css样式操作代码(批量操作)
Oct 09 Javascript
jQuery 开发者应该注意的9个错误
May 03 Javascript
js style动态设置table高度
Oct 21 Javascript
node.js中的fs.openSync方法使用说明
Dec 17 Javascript
浅谈javascript中的instanceof和typeof
Feb 27 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
基于ajax实现文件上传并显示进度条
Aug 03 Javascript
JS中闭包的经典用法小结(2则示例)
Dec 28 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
Jan 09 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 jQuery
通过实例学习React中事件节流防抖
Jun 17 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 使用html5实现多文件上传实例
2016/10/24 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
python处理csv数据的方法
2015/03/11 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
从0开始的Python学习016异常
2019/04/08 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
Python作用域与名字空间原理详解
2020/03/21 Python
python中time包实例详解
2021/02/02 Python
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
软件缺陷的分类都有哪些
2014/08/22 面试题
合作意向书模板
2014/03/31 职场文书
初中学生期末评语
2014/04/24 职场文书
法人任命书范本
2014/06/04 职场文书
民族精神月活动总结
2014/08/28 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
悬空寺导游词
2015/02/05 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
MySQL主从切换的超详细步骤
2022/06/28 MySQL