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 相关文章推荐
10个基于Jquery的幻灯片插件教程
Oct 29 Javascript
javascript实现yield的方法
Nov 06 Javascript
js 获取元素在页面上的偏移量的方法汇总
Apr 13 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
Apr 29 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 Javascript
详解Node.js中的事件机制
Sep 22 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
vue的一个分页组件的示例代码
Dec 25 Javascript
工作中常用到的ES6语法
Sep 04 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 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中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
关于Django外键赋值问题详解
2017/08/13 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python单元测试简单示例
2018/07/03 Python
利用python画出折线图
2018/07/26 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
Python和Go语言的区别总结
2019/02/20 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
python 函数中的参数类型
2020/02/11 Python
Django 解决由save方法引发的错误
2020/05/21 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
护士专业推荐信
2013/11/02 职场文书
擅自离岗检讨书
2014/02/11 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
女儿满月酒致辞
2015/07/29 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js