React-Native定时器Timer如何实现

在web开发中,我们通常需要使用定时器功能,使用settimeout和setinterval函数。本文主要介绍了react-native之定时器timer的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

那么在ReactNative中,是否也提供了定时器的功能呢? 答案是肯定的。

我们还是先看看官网怎么说的。

定时器是一个应用中非常重要的部分。React Native实现了和浏览器一致的定时器Timer

提供的方法如下:

setTimeout, clearTimeout

setInterval, clearInterval

setImmediate, clearImmediate

requestAnimationFrame, cancelAnimationFrame

setTimeout (fn, 1000)  和 setInterval (fn,1000)

和web中的意思一样,前者表示延迟1000毫秒后执行 fn 方法 ,后者表示每隔1000毫秒执行 fn 方法。

requestAnimationFrame(fn)和setTimeout(fn, 0)不同,前者会在每帧刷新之后执行一次,而后者则会尽可能快的执行(在iPhone5S上有可能每秒1000次以上)。

setImmediate则会在当前JavaScript执行块结束的时候执行,就在将要发送批量响应数据到原生之前。注意如果你在setImmediate的回调函数中又执行了setImmediate,它会紧接着立刻执行,而不会在调用之前等待原生代码。

Promise的实现就使用了setImmediate来执行异步调用。

InteractionManager(交互管理器)

原生应用感觉如此流畅的一个重要原因就是在互动和动画的过程中避免繁重的操作。在React Native里,我们目前受到限制,因为我们只有一个JavaScript执行线程。不过你可以用InteractionManager来确保在执行繁重工作之前所有的交互和动画都已经处理完毕。

应用可以通过以下代码来安排一个任务,使其在交互结束之后执行:

InteractionManager.runAfterInteractions(() => {   // ...需要长时间同步执行的任务... });

登录后复制

我们来把它和之前的几个任务安排方法对比一下:

requestAnimationFrame(): 用来执行在一段时间内控制视图动画的代码

setImmediate/setTimeout/setInterval(): 在稍后执行代码。注意这有可能会延迟当前正在进行的动画。

runAfterInteractions(): 在稍后执行代码,不会延迟当前进行的动画。
触摸处理系统会把一个或多个进行中的触摸操作认定为’交互’,并且会将runAfterInteractions()的回调函数延迟执行,直到所有的触摸操作都结束或取消了。

InteractionManager还允许应用注册动画,在动画开始时创建一个交互“句柄”,然后在结束的时候清除它。

var handle = InteractionManager.createInteractionHandle(); // 执行动画... (`runAfterInteractions`中的任务现在开始排队等候) // 在动画完成之后 InteractionManager.clearInteractionHandle(handle); // 在所有句柄都清除之后,现在开始依序执行队列中的任务

登录后复制

TimerMixin

我们发现很多React Native应用发生致命错误(闪退)是与计时器有关。具体来说,是在某个组件被卸载(unmount)之后,计时器却仍然被激活。为了解决这个问题,我们引入了TimerMixin。如果你在组件中引入TimerMixin,就可以把你原本的setTimeout(fn, 500)改为this.setTimeout(fn, 500)(只需要在前面加上this.),然后当你的组件卸载时,所有的计时器事件也会被正确的清除。

这个库并没有跟着React Native一起发布。你需要在项目文件夹下输入npm i react-timer-mixin –save来单独安装它。

var TimerMixin = require('react-timer-mixin');  var Component = React.createClass({  mixins: [TimerMixin],  componentDidMount: function() {   this.setTimeout(    () => { console.log('这样我就不会导致内存泄露!'); },    500   );  } });

登录后复制

我们强烈建议您使用react-timer-mixin提供的this.setTimeout(…)来代替setTimeout(…)。这可以规避许多难以排查的BUG。

译注:Mixin属于ES5语法,对于ES6代码来说,无法直接使用Mixin。

如果你的项目是用ES6代码编写,同时又使用了计时器,那么你只需铭记在unmount组件时清除(clearTimeout/clearInterval)所有用到的定时器。

那么也可以实现和TimerMixin同样的效果。例如:

import React,{  Component } from 'react-native';   export default class Hello extends Component {  componentDidMount() {   this.timer = setTimeout(    () => { console.log('把一个定时器的引用挂在this上'); },    500   );  }  componentWillUnmount() {   // 如果存在this.timer,则使用clearTimeout清空。   // 如果你使用多个timer,那么用多个变量,或者用个数组来保存引用,然后逐个clear   this.timer && clearTimeout(this.timer);  } };

登录后复制

注意点:

1、定时器功能比较简单,注意在es6中使用时,需铭记在unmount组件时清除(clearTimeout/clearInterval)所有用到的定时器。
2、可以使用定时器实现一些普通功能:如短信倒计时等
3、对于一些需要延迟执行的特殊场景也可以使用Timer,譬如:目前RN提供的fetch是没有提供设置超时时间的,如果客户端请求后端的一个接口,接口超时了(后端服务设置的超时时间为10s),那么RN界面就一直loading,也不能aborded。那么这时候我们就可以巧妙的使用计时器,如果客户端发出的Request,时间大于某个值(5秒),那么我们直接认为请求失败。
4、今天还发现一个使用setTimeout的场景,在列表页加载下一页的时候,如果接口响应很快,就不会出现loading的效果,这个时候为了有loading的效果,设置一个500毫秒的延时,呵呵….

相关推荐:

jQuery扇形定时器插件pietimer使用方法分享

C#中关于Timer定时器重入问题的解决方法

php Timer 页面运行时间监测类

以上就是React-Native定时器Timer如何实现的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2788558.html

(0)
上一篇 2025年3月8日 18:28:10
下一篇 2025年2月19日 23:59:27

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • javascript定时器实现进度条功能

    本文主要介绍javascript基于定时器实现进度条功能,简单分析了javascript定时器的功能、使用方法并给出了基于定时器实现的进度条功能实例,需要的朋友可以参考下,希望能帮助到大家。 Javascript 中的定时器 window度…

    2025年3月8日
    200
  • AngualrJs如何解决清除定时器遇到的坑

    本文主要介绍了angualrjs清除定时器遇到的坑,需要的朋友可以参考下,希望能帮助到大家。 今天发现一个奇怪问题,放在自定义指令里边的定时器竟然在页面跳转之后,在另一个页面这个循环定时器还在执行,这肯定是不行的,会影响系统的性能。 我在a…

    编程技术 2025年3月8日
    200
  • react-native中ListView组件点击跳转实现方法

    本文主要给大家介绍了关于react-native中listview组件点击跳转的相关资料,listview作为react native的核心组件,用于高效地显示一个可以垂直滚动的变化的数据列表。需要的朋友可以参考借鉴,下面来一起看看吧。 先…

    2025年3月8日
    200
  • 详解React-Native左右联动List

    本文主要和大家介绍react-native左右联动list的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 一:左右联动List,在工作中很常见。 今天分享一个同事写的例子,本人只做…

    2025年3月8日
    200
  • Node定时器详细解析

    javascript 是单线程运行,异步操作特别重要。本文主要和大家介绍了node 定时器的相关知识,只要用到引擎之外的功能,就需要跟外部交互,从而形成异步操作。由于异步操作实在太多,javascript 不得不提供很多异步语法。 Node…

    2025年3月8日 编程技术
    200
  • react-native WebView 返回处理方法

    项目中有些页面内容是变更比较频繁的,这些页面我们会考虑用 网页 来解决。 在RN项目中提供一个公用的Web页,如果是网页内容,就跳转到这个界面展示。 此时会有一个问题是,网页会有一级页面,二级页面,这就会设计到导航栏返回键的处理(以及在An…

    2025年3月8日 编程技术
    200
  • 深入JavaScript之定时器

    这次给大家带来深入javascript之定时器,使用javascript的定时器注意事项有哪些,下面就是实战案例,一起来看一下。 获取 年 月 日 星期 时 分 秒 var date = new Date() date.getFullYea…

    2025年3月8日
    200
  • JavaScript的定时器详解

    这次给大家带来javascript的定时器详解,使用javascript的定时器注意事项有哪些,下面就是实战案例,一起来看一下。 除了放置异步任务的事件,”任务队列”还可以放置定时事件,即指定某些代码在多少时间之后执…

    编程技术 2025年3月8日
    200
  • react-native flatlist上拉加载onEndReached频繁触发怎么解决

    这次给大家带来react-native flatlist上拉加载onendreached频繁触发怎么解决,解决react-native flatlist上拉加载onendreached频繁触的注意事项有哪些,下面就是实战案例,一起来看一下。…

    编程技术 2025年3月8日
    200
  • JS实现动画定时器方法

    本文主要和大家分享js实现动画定时器方法,广义说:一切通过js改变的视觉呈现都叫动画;例如,按钮,链接等元素交互反馈。,狭义说:通过定时器连续调用js函数进行元素属性改变产生的视觉动画效果。 定时器 定时器是JavaScript动画的核心技…

    2025年3月8日
    200

发表回复

登录后才能评论