search
HomeWeb Front-endJS TutorialHow to implement React-Native timer Timer

How to implement React-Native timer Timer

Jan 27, 2018 pm 04:54 PM
react-nativetimertimer

In web development, we usually need to use the timer function, using the setTimeout and setInterval functions. This article mainly introduces the implementation code of the React-Native timer Timer. The editor thinks it is quite good, so I will share it with you now and give it as a reference. Let’s follow the editor to take a look, I hope it can help everyone.

So in ReactNative, is the timer function also provided? The answer is yes.

Let’s take a look at what the official website says first.

The timer is a very important part of an application. React Native implements a timer that is consistent with the browser.

The methods provided are as follows:

  • setTimeout, clearTimeout

  • setInterval, clearInterval

  • setImmediate, clearImmediate

  • ##requestAnimationFrame, cancelAnimationFrame

##setTimeout (fn, 1000) and setInterval (fn,1000)

The meaning is the same as in the web. The former means to execute the fn method after a delay of 1000 milliseconds, and the latter means to execute the fn method every 1000 milliseconds.

requestAnimationFrame(fn) is different from setTimeout(fn, 0). The former will be executed once after each frame refresh, while the latter will be executed as quickly as possible (possibly more than 1000 times per second on iPhone5S) .

setImmediate will be executed at the end of the current JavaScript execution block, just before sending batch response data to the native. Note that if you execute setImmediate in the callback function of setImmediate, it will be executed immediately without waiting for the native code before calling.

The implementation of Promise uses setImmediate to perform asynchronous calls.

InteractionManager(Interaction Manager)


An important reason why native applications feel so smooth is to avoid heavy operations during interactions and animations. In React Native, we are currently limited because we only have one JavaScript execution thread. However, you can use the InteractionManager to ensure that all interactions and animations have been handled before doing the heavy lifting.


The application can schedule a task to be executed after the interaction ends by using the following code:



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

us Let’s compare it with the previous task scheduling methods:


requestAnimationFrame(): used to execute code that controls view animation within a period of time


setImmediate/ setTimeout/setInterval(): Execute code later. Note that this may delay the animation currently in progress.


runAfterInteractions(): Execute the code later without delaying the currently ongoing animation.

The touch processing system will identify one or more ongoing touch operations as 'interaction', and will delay the execution of the callback function of runAfterInteractions() until all touch operations have ended or been cancelled.



InteractionManager also allows applications to register animations, creating an interaction "handle" when the animation starts, and then clearing it when it ends.

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

TimerMixin


We found that many fatal errors (crashbacks) in React Native applications are related to timers . Specifically, after a component is unmounted, the timer is still activated. To solve this problem, we introduced TimerMixin. If you introduce TimerMixin into your component, you can change your original setTimeout(fn, 500) to this.setTimeout(fn, 500) (just add this. in front of it), and then when your component is uninstalled, all The timer event will also be cleared correctly.

This library is not released with React Native. You need to enter npm i react-timer-mixin --save in the project folder to install it separately.

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

We strongly recommend that you use this.setTimeout(...) provided by react-timer-mixin instead of setTimeout(...). This can avoid many difficult-to-debug bugs.

Translation Note: Mixin belongs to ES5 syntax. For ES6 code, Mixin cannot be used directly.


If your project is written in ES6 code and uses timers, then you only need to remember to clear (clearTimeout/clearInterval) all used timers when unmounting the component.


Then the same effect as TimerMixin can also be achieved. For example:

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); 
 } 
};

Note:

1. The timer function is relatively simple. When using it in es6, you need to remember to clear (clearTimeout/clearInterval) all used timers when unmounting the component.
2. You can use timers to implement some common functions: such as text message countdowns, etc.
3. You can also use Timers for some special scenarios that require delayed execution. For example: the fetch currently provided by RN does not provide a timeout setting. , if the client requests an interface on the backend and the interface times out (the timeout set by the backend service is 10s), then the RN interface will always be loading and cannot be aborted. Then we can use the timer cleverly at this time. If the time of the Request sent by the client is greater than a certain value (5 seconds), then we will directly consider the request to have failed.
4. Today I also found a scenario where setTimeout is used. When the list page loads the next page, if the interface responds quickly, the loading effect will not appear. At this time, in order to have the loading effect, set a 500 millisecond Delay, haha....

Related recommendations:

jQuery sector timer plug-in pietimer usage method sharing

C#中About the solution to the problem of Timer timer re-entry

php Timer page running time monitoring class

The above is the detailed content of How to implement React-Native timer Timer. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
JavaScript in Action: Real-World Examples and ProjectsJavaScript in Action: Real-World Examples and ProjectsApr 19, 2025 am 12:13 AM

JavaScript's application in the real world includes front-end and back-end development. 1) Display front-end applications by building a TODO list application, involving DOM operations and event processing. 2) Build RESTfulAPI through Node.js and Express to demonstrate back-end applications.

JavaScript and the Web: Core Functionality and Use CasesJavaScript and the Web: Core Functionality and Use CasesApr 18, 2025 am 12:19 AM

The main uses of JavaScript in web development include client interaction, form verification and asynchronous communication. 1) Dynamic content update and user interaction through DOM operations; 2) Client verification is carried out before the user submits data to improve the user experience; 3) Refreshless communication with the server is achieved through AJAX technology.

Understanding the JavaScript Engine: Implementation DetailsUnderstanding the JavaScript Engine: Implementation DetailsApr 17, 2025 am 12:05 AM

Understanding how JavaScript engine works internally is important to developers because it helps write more efficient code and understand performance bottlenecks and optimization strategies. 1) The engine's workflow includes three stages: parsing, compiling and execution; 2) During the execution process, the engine will perform dynamic optimization, such as inline cache and hidden classes; 3) Best practices include avoiding global variables, optimizing loops, using const and lets, and avoiding excessive use of closures.

Python vs. JavaScript: The Learning Curve and Ease of UsePython vs. JavaScript: The Learning Curve and Ease of UseApr 16, 2025 am 12:12 AM

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

Python vs. JavaScript: Community, Libraries, and ResourcesPython vs. JavaScript: Community, Libraries, and ResourcesApr 15, 2025 am 12:16 AM

Python and JavaScript have their own advantages and disadvantages in terms of community, libraries and resources. 1) The Python community is friendly and suitable for beginners, but the front-end development resources are not as rich as JavaScript. 2) Python is powerful in data science and machine learning libraries, while JavaScript is better in front-end development libraries and frameworks. 3) Both have rich learning resources, but Python is suitable for starting with official documents, while JavaScript is better with MDNWebDocs. The choice should be based on project needs and personal interests.

From C/C   to JavaScript: How It All WorksFrom C/C to JavaScript: How It All WorksApr 14, 2025 am 12:05 AM

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

JavaScript Engines: Comparing ImplementationsJavaScript Engines: Comparing ImplementationsApr 13, 2025 am 12:05 AM

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

Beyond the Browser: JavaScript in the Real WorldBeyond the Browser: JavaScript in the Real WorldApr 12, 2025 am 12:06 AM

JavaScript's applications in the real world include server-side programming, mobile application development and Internet of Things control: 1. Server-side programming is realized through Node.js, suitable for high concurrent request processing. 2. Mobile application development is carried out through ReactNative and supports cross-platform deployment. 3. Used for IoT device control through Johnny-Five library, suitable for hardware interaction.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)