Rumah hujung hadapan web tutorial js React-Native定时器Timer如何实现

React-Native定时器Timer如何实现

Jan 27, 2018 pm 04:54 PM
react-native timer pemasa

在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(() => { 
  // ...需要长时间同步执行的任务... 
});
Salin selepas log masuk

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

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

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

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

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


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

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 
  ); 
 } 
});
Salin selepas log masuk

我们强烈建议您使用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); 
 } 
};
Salin selepas log masuk

注意点:

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 页面运行时间监测类

Atas ialah kandungan terperinci React-Native定时器Timer如何实现. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menukar versi react native Cara menukar versi react native Jan 19, 2023 pm 02:31 PM

Cara menukar versi react native: 1. Masukkan direktori projek React Native dan masukkan "react-native --version" pada baris arahan 2. Semak versi React Native yang diuruskan oleh pakej npm; .json" dalam projek , ubah suai medan dependencies dan tukar versi "react-native" kepada versi sasaran.

Bagaimana untuk menetapkan pemasa pada kamera iPhone anda Bagaimana untuk menetapkan pemasa pada kamera iPhone anda Apr 14, 2023 am 10:43 AM

Berapa lama anda boleh menetapkan pemasa pada kamera iPhone anda? Apabila anda mengakses pilihan pemasa dalam apl kamera iPhone, anda akan diberi pilihan untuk memilih antara dua mod: 3 saat (3s) dan 10 saat (10s). Pilihan pertama membolehkan anda mengambil swafoto pantas dari kamera hadapan atau belakang semasa anda memegang iPhone anda. Pilihan kedua berguna dalam adegan di mana anda boleh melekapkan iPhone anda pada tripod dari jauh untuk mengklik foto kumpulan atau swafoto. Cara Menetapkan Pemasa pada Kamera iPhone Walaupun menetapkan pemasa pada kamera iPhone adalah proses yang agak mudah, cara untuk melakukannya berbeza-beza bergantung pada model iPhone yang anda gunakan.

Apakah ungkapan pemasa java? Apakah ungkapan pemasa java? Dec 27, 2023 pm 05:06 PM

Ungkapan pemasa digunakan untuk menentukan pelan pelaksanaan tugas. Ungkapan pemasa adalah berdasarkan model "laksanakan tugas selepas selang masa tertentu". Ungkapan ini biasanya terdiri daripada dua bahagian: kelewatan awal dan selang masa.

Bagaimana untuk melaksanakan fungsi pemasa dalam dokumen Workerman Bagaimana untuk melaksanakan fungsi pemasa dalam dokumen Workerman Nov 08, 2023 pm 05:06 PM

Cara melaksanakan fungsi pemasa dalam dokumen Workerman Workerman ialah rangka kerja komunikasi rangkaian tak segerak PHP yang berkuasa yang menyediakan pelbagai fungsi, termasuk fungsi pemasa. Gunakan pemasa untuk melaksanakan kod dalam selang masa yang ditentukan, yang sangat sesuai untuk senario aplikasi seperti tugas yang dijadualkan dan tinjauan pendapat. Seterusnya, saya akan memperkenalkan secara terperinci cara melaksanakan fungsi pemasa dalam Workerman dan memberikan contoh kod khusus. Langkah 1: Pasang Workerman Mula-mula, kita perlu memasang Worker

Bagaimana untuk menetapkan pemasa untuk pelaksanaan tugas berjadual harian di Jawa? Bagaimana untuk menetapkan pemasa untuk pelaksanaan tugas berjadual harian di Jawa? Dec 27, 2023 am 11:10 AM

Pemasa Java: Bagaimana untuk menetapkan tugas pelaksanaan berjadual setiap hari? Dalam pembangunan Java harian, kita sering menghadapi keperluan untuk melaksanakan tugas tertentu secara berkala setiap hari. Contohnya, lakukan tugasan sandaran data pada pukul 1 pagi setiap hari, atau hantar e-mel setiap hari pada pukul 8 malam setiap hari, dsb. Jadi di Jawa, kita boleh menggunakan pemasa untuk mencapai fungsi sedemikian. Java menyediakan pelbagai kaedah pelaksanaan pemasa Artikel ini akan memperkenalkan dua kaedah berdasarkan Pemasa dan ScheduledExecutorService.

Bagaimanakah pemasa berfungsi? Bagaimanakah pemasa berfungsi? Aug 16, 2023 pm 02:18 PM

Prinsip kerja pemasa boleh dibahagikan kepada dua jenis: pemasa perkakasan dan pemasa perisian. Prinsip kerja pemasa perkakasan ialah sumber isyarat jam menyediakan isyarat jam yang stabil sebagai rujukan pemasa. Kaunter mula mengira dari nilai pratetap dan dinaikkan setiap kali isyarat jam tiba. Apabila kaunter mencapai nilai pratetap, pemasa akan mencetuskan isyarat gangguan untuk memberitahu pengawal gangguan untuk memproses rutin perkhidmatan gangguan yang sepadan. Dalam rutin perkhidmatan gangguan, beberapa operasi yang telah ditetapkan boleh dilakukan. Prinsip kerja pemasa perisian dilaksanakan melalui fungsi perpustakaan atau panggilan sistem yang disediakan oleh bahasa pengaturcaraan atau sistem, dsb.

Bagaimana untuk menyediakan tugas bulanan berjadual di Jawa? Bagaimana untuk menyediakan tugas bulanan berjadual di Jawa? Jan 11, 2024 pm 04:50 PM

Pemasa Java: Bagaimana untuk menetapkan tugas pelaksanaan berjadual bulanan? Pengenalan: Dalam pembangunan, kami sering menghadapi senario yang memerlukan pelaksanaan tugasan bulanan, seperti kemas kini bulanan data statistik, penghantaran laporan tetap, dsb. Java menyediakan pelbagai kaedah pelaksanaan pemasa Artikel ini akan memperkenalkan cara menggunakan pemasa Java untuk melaksanakan tugas pelaksanaan berjadual bulanan dan menyediakan contoh kod khusus. 1. Gunakan kelas Pemasa untuk melaksanakan tugas berjadual bulanan Kelas Pemasa ialah kelas pemasa paling asas yang disediakan oleh Java, di mana tugas berjadual mudah boleh dilaksanakan.

Kuasai fungsi masa.NewTimer dalam dokumentasi bahasa Go untuk melaksanakan pemasa tunggal Kuasai fungsi masa.NewTimer dalam dokumentasi bahasa Go untuk melaksanakan pemasa tunggal Nov 03, 2023 pm 02:19 PM

Kuasai fungsi masa.NewTimer dalam dokumentasi bahasa Go untuk melaksanakan pemasa satu pukulan dan melampirkan contoh kod tertentu. Masa adalah penanda aras kehidupan kita, dan pemasa adalah salah satu alat yang paling biasa digunakan dalam pengaturcaraan. Dalam bahasa Go, kita boleh menggunakan pakej masa untuk mengendalikan operasi berkaitan masa, dan fungsi NewTimer boleh digunakan untuk mencipta pemasa satu pukulan. Artikel ini akan memperkenalkan cara menggunakan fungsi NewTimer untuk melaksanakan pemasa satu pukulan yang mudah dan melampirkan contoh kod tertentu. Dalam bahasa Go, tim

See all articles