Таймер — это удобный инструмент, который можно использовать в любом компоненте вашего приложения, и он особенно полезен при отображении временных экранов или анимированного контента. Хотя они широко используются, их реализация иногда может быть сложной, чаще всего, когда у вас много вещей. происходит в фоновом режиме.

Самый простой способ установить таймер — использовать хорошо известный метод setTimeout(), который вызывает функцию или вычисляет выражение по истечении заданного времени (миллисекунд). В приведенном ниже примере после вызова myFunction() через 3 секунды отобразится предупреждение с текстом «hello».

// Create a variable
var myVar;
// Alert function
function alertFunc() {
 alert(“Hello!”);
}
// Set the variable to a timed alert
function myFunction() {
 myVar = setTimeout(alertFunc, 3000);
}

Теперь в качестве реального примера того, как использовать таймеры в React Native, я покажу вам, как они были реализованы с помощью анимированной заставки, которая отображается во время аутентификации пользователя.

SPLASHLOADING.JS
import React from 'react';
import { Text, View, StyleSheet, SafeAreaView, Dimensions, TextInput, ScrollView, SectionList, TouchableOpacity, Image } from 'react-native';
import { DotIndicator } from 'react-native-indicators';
import { colours } from '../../styles/Colours'; 
// Firebase
import firebase from '../../services/Firebase';
var db = firebase.firestore(); 
const { width, height } = Dimensions.get("window");
const topSpacing = (height / 2) - 50;  
export default class SplashLoading extends React.Component {
   isMounted = false;
   constructor(props) {        
      super(props);        
      this.state = ({            
         userIsLoggedIn: 'false',            
         imageLoaded: false,        
      });     
   }     
   static navigationOptions = {        
      header: null,     
   }     

   checkUserAuth() {        
      firebase.auth().onAuthStateChanged(authenticate => {            
      if (authenticate) {                
         setTimeout(() => { 
            this.props.navigation.navigate('Home');                
         }, 2500);             
      } else {                
        setTimeout(() => { 
            this.props.navigation.navigate('Login');                
        }, 2500);             
      }        
   });    
 }     

Важный код

Это важный код класса, в котором есть два таймера. Здесь они используются для управления временем заставки во время аутентификации пользователей, создавая согласованный поток аутентификации каждый раз, когда пользователь открывает приложение.

checkUserAuth() {        
      firebase.auth().onAuthStateChanged(authenticate => {            
      if (authenticate) {                
         setTimeout(() => { 
            this.props.navigation.navigate('Home');                
         }, 2500);             
      } else {                
        setTimeout(() => { 
            this.props.navigation.navigate('Login');                
        }, 2500);             
      }        
   });    
 }

Первый setTimeout вызывается, если пользователь успешно аутентифицирован. Если это так, экран-заставка отображается примерно 2,5 секунды, после чего он быстро заменяется начальным экраном. Второй setTimeout почти такой же, за исключением того, что при вызове экран-заставка заменяется экраном входа в систему, поскольку пользователь еще не прошел аутентификацию.

В основном таймер действует как буфер в отношении времени. Это предотвращает включение и выключение экрана-заставки, что не очень привлекательно с точки зрения взаимодействия с пользователем.

В заключении

Таймеры — отличное решение многих проблем, с которыми вы можете столкнуться при создании программного обеспечения, однако они не всегда являются лучшим вариантом, и обычно это зависит от поставленной задачи. Иногда вместо использования таймера для экрана-заставки вы можете дождаться ответа от приложения. Хотя время на экране-заставке может варьироваться в зависимости от операции, это будет означать, что все должно работать гладко и быть полностью работоспособным перед переносом на следующий экран. Это может предотвратить проблемы позже.

Спасибо за чтение!