欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React?Native?中實(shí)現(xiàn)倒計(jì)時(shí)功能

 更新時(shí)間:2022年08月09日 09:08:41   作者:todoit  
這篇文章主要介紹了React?Native中實(shí)現(xiàn)倒計(jì)時(shí)功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

在 React Native,該如何實(shí)現(xiàn)一個(gè)倒計(jì)時(shí)功能呢?

首次實(shí)現(xiàn)

表面看來很簡單,譬如像下面這樣:

const timer = useRef<ReturnType<typeof setInterval> | null>(null)
const [count, setCount] = useState(0)
const start = () => {
  setCount(10)
  timer.current = setInterval(() => {
    setCount((count) => count - 1)
  }, 1000)
}
useEffect(() => {
  if (count === 0 && timer.current !== null) {
    clearInterval(timer.current)
    timer.current = null
  }
}, [count])

這段代碼大多數(shù)情況下是可以正常工作的。但是你將應(yīng)用退到后臺,稍后再進(jìn)入看看。

很有可能,原本應(yīng)該結(jié)束的倒計(jì)時(shí),還在工作。

這是因?yàn)?React Native 應(yīng)用退到后臺后,世界會停止。為了適應(yīng)這點(diǎn),我們應(yīng)該先設(shè)定希望倒計(jì)時(shí)結(jié)束的時(shí)間,然后每隔一秒計(jì)算一次當(dāng)前時(shí)間與結(jié)束時(shí)間之差(秒)。

此外,當(dāng)應(yīng)用退到后臺時(shí),應(yīng)該清除定時(shí)器。

最終實(shí)現(xiàn)

考慮上述種種,倒計(jì)時(shí)的實(shí)現(xiàn)并不簡單。

我們可以封裝一個(gè)自定義 Hook 來提供可復(fù)用的倒計(jì)時(shí)功能。

import { useAppState } from '@react-native-community/hooks'
import { useCallback, useEffect, useRef, useState } from 'react'
export function useCountdown(seconds = 30) {
  const timer = useRef<ReturnType<typeof setInterval> | null>(null)
  const [target, setTarget] = useState<Date | null>(null)
  const [count, setCount] = useState<number>(0)
  const appState = useAppState()
  const start = useCallback(() => {
    setTarget(add(new Date(), seconds))
  }, [seconds])
  const stop = useCallback(() => {
    setTarget(null)
    setCount(0)
  }, [])
  useEffect(() => {
    if (target === null || appState !== 'active') {
      return
    }
    setCount(diff(new Date(), target))
    timer.current = setInterval(() => {
      setCount(diff(new Date(), target))
    }, 1000)
    return () => {
      if (timer.current) {
        clearInterval(timer.current)
        timer.current = null
      }
    }
  }, [target, appState])
  useEffect(() => {
    if (count === 0) {
      stop()
    }
  }, [count, stop])
  return { count, start, stop }
}
function add(date: Date, seconds: number) {
  return new Date(date.getTime() + seconds * 1000)
}
function diff(now: Date, target: Date) {
  return Math.max(
    Math.trunc((target.getTime() - now.getTime()) / 1000 + 0.5),
    0
  )
}

示例

這里有一個(gè)示例,供你參考。

以上就是React Native 中實(shí)現(xiàn)倒計(jì)時(shí)功能的詳細(xì)內(nèi)容,更多關(guān)于React Native倒計(jì)時(shí)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法

    使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法

    本篇文章主要介紹了使用Electron構(gòu)建React+Webpack桌面應(yīng)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 解決React報(bào)錯Parameter 'props' implicitly has an 'any' type

    解決React報(bào)錯Parameter 'props' implicitly&nb

    這篇文章主要為大家介紹了React報(bào)錯Parameter 'props' implicitly has an 'any' type的解決處理方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 關(guān)于React Native報(bào)Cannot initialize a parameter of type''NSArray<id<RCTBridgeModule>>錯誤(解決方案)

    關(guān)于React Native報(bào)Cannot initialize a parameter of type''NSArra

    這篇文章主要介紹了關(guān)于React Native報(bào)Cannot initialize a parameter of type'NSArray<id<RCTBridgeModule>>錯誤,本文給大家分享解決方案,需要的朋友可以參考下
    2021-05-05
  • React中用@符號編寫文件路徑實(shí)現(xiàn)方法介紹

    React中用@符號編寫文件路徑實(shí)現(xiàn)方法介紹

    在Vue中,我們導(dǎo)入文件時(shí),文件路徑中可以使用@符號指代src目錄,極大的簡化了我們對路徑的書寫。但是react中,要想實(shí)現(xiàn)這種方式書寫文件路徑,需要寫配置文件來實(shí)現(xiàn)
    2022-09-09
  • 使用React實(shí)現(xiàn)一個(gè)簡單的待辦任務(wù)列表

    使用React實(shí)現(xiàn)一個(gè)簡單的待辦任務(wù)列表

    這篇文章主要給大家介紹了使用React和Ant Design庫構(gòu)建的待辦任務(wù)列表應(yīng)用,它包含了可編輯的表格,用戶可以添加、編輯和完成任務(wù),以及保存任務(wù)列表數(shù)據(jù)到本地存儲,文中有相關(guān)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • React中使用Vditor自定義圖片詳解

    React中使用Vditor自定義圖片詳解

    這篇文章主要介紹了React中使用Vditor自定義圖片詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 如何將你的AngularJS1.x應(yīng)用遷移至React的方法

    如何將你的AngularJS1.x應(yīng)用遷移至React的方法

    本篇文章主要介紹了如何將你的AngularJS1.x應(yīng)用遷移至React的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • 基于react hooks,zarm組件庫配置開發(fā)h5表單頁面的實(shí)例代碼

    基于react hooks,zarm組件庫配置開發(fā)h5表單頁面的實(shí)例代碼

    這篇文章主要介紹了基于react hooks,zarm組件庫配置開發(fā)h5表單頁面,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 模塊化react-router配置方法詳解

    模塊化react-router配置方法詳解

    這篇文章主要介紹了模塊化react-router配置方法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • React實(shí)現(xiàn)圖片懶加載的常見方式

    React實(shí)現(xiàn)圖片懶加載的常見方式

    圖片懶加載是一種優(yōu)化網(wǎng)頁性能的技術(shù),它允許在用戶滾動到圖片位置之前延遲加載圖片,通過懶加載,可以在用戶需要查看圖片時(shí)才加載圖片,避免了不必要的圖片加載,本文給大家介紹了React實(shí)現(xiàn)圖片懶加載的常見方式,需要的朋友可以參考下
    2024-01-01

最新評論