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

react?hooks頁面實時刷新方式(setInterval)

 更新時間:2024年03月12日 15:30:57   作者:一車雞蛋  
這篇文章主要介紹了react?hooks頁面實時刷新方式(setInterval),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1. 實現(xiàn)

頁面實時刷新一般用定時器(setInterval())實現(xiàn)。

  • 定時器:setInterval() - 每多少秒執(zhí)行一次指定的代碼。(執(zhí)行多次)
  • 延時器:setTimeout() - 多少秒以后執(zhí)行指定代碼。(執(zhí)行1次)

定時器與延時器均為異步程序,放在異步隊列里執(zhí)行!

2. 注意點

  • 1.  頁面使用定時器一定要記得清除。
  • 2.  useEffect 的數(shù)組依賴不要忘記,不然只執(zhí)行一次。
  • 3.  也可以使用useRef(為了避免setInterval變量形成閉包)

方式一:使用數(shù)組依賴

function Index() {
  const [count, setCount] = useState(0);
 
  useEffect(() => {
    const timer = setInterval(() => {
    
    //可以調(diào)接口
    //可以存state,如setCount(count + 1)
    //可以調(diào)其他函數(shù)
 
    }, 1000);
    return () => clearInterval(timer);  //清除定時器不要忘記
  }, [count]);  //數(shù)組依賴不要忘記
 
  return <div>{count}</div>;
}

方式二:使用useRef

function Index() {
  const savecallback=useRef(null); //為了避免形成閉包
  function callback(){
    // 可以調(diào)其他函數(shù)
    // 可以調(diào)接口
  }
 
  /*每當組件被重新渲染,useEffect 都會將最新的回調(diào)函數(shù)賦值給 ref.current,接著 ref.current會被放到 setInterval 里去執(zhí)行。所以 setInterval 雖只在組件初始化時被啟動了一次,但它在執(zhí)行每次定時任務(wù)時,使用的都是最新的回調(diào)函數(shù)。回調(diào)函數(shù)不再被困于閉包當中,最新的 state、props 自然能夠被取到。*/
  
  useEffect(() => {
    (savecallback as any).current = callback;
  });
 
  useEffect(() => {
    const timer = setInterval(() => {
      (savecallback as any).current();
    }, 1000);
    return () => clearInterval(timer);
  }, []);
 
  return <div>頁面</div>;
}

方式三:使用useReducer 狀態(tài)管理 

(對于定時更新某個變量更友好,定時調(diào)接口的話還是上邊兩種更方便一點)

const intitstate= {count: 0};
 
function reducer(state = 0,action) {
  return {count: state.count + 1};
}
 
export default function Index() {
  const [state, dispatch] = useReducer(reducer,intitstate);
 
  useEffect(() => {
    setInterval(() => {
      dispatch();
    }, 1000);
  }, []);
 
  return <div>{state.count}</div>;
}

因為閉包的原因,回調(diào)函數(shù)無法取到最新的 state,而大多數(shù)場景下我們更新 state 前又必須先獲取 state 的當前值。

那如何才能夠在不讀取最新 state 的前提下,對 state 進行增量更新,可以用useReducer 狀態(tài)管理。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React實現(xiàn)一個通用骨架屏組件示例

    React實現(xiàn)一個通用骨架屏組件示例

    骨架屏就是在頁面數(shù)據(jù)尚未加載前先給用戶展示出頁面的大致結(jié)構(gòu),直到請求數(shù)據(jù)返回后再渲染頁面,補充進需要顯示的數(shù)據(jù)內(nèi)容,本文就介紹了React實現(xiàn)一個通用骨架屏組件示例,分享給大家,感興趣的可以了解一下
    2021-12-12
  • react 創(chuàng)建單例組件的方法

    react 創(chuàng)建單例組件的方法

    這篇文章主要介紹了react 創(chuàng)建單例組件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 在react-router4中進行代碼拆分的方法(基于webpack)

    在react-router4中進行代碼拆分的方法(基于webpack)

    這篇文章主要介紹了在react-router4中進行代碼拆分的方法(基于webpack),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • react?Scheduler?實現(xiàn)示例教程

    react?Scheduler?實現(xiàn)示例教程

    這篇文章主要為大家介紹了react?Scheduler?實現(xiàn)示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • React版本18.xx降低為17.xx的方法實現(xiàn)

    React版本18.xx降低為17.xx的方法實現(xiàn)

    由于現(xiàn)在react默認創(chuàng)建是18.xx版本,但是我們現(xiàn)在大多使用的還是17.xx或者更低的版本,于是要對react版本進行降級,本文主要介紹了React版本18.xx降低為17.xx的方法實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • React通過useContext特性實現(xiàn)組件數(shù)據(jù)傳遞

    React通過useContext特性實現(xiàn)組件數(shù)據(jù)傳遞

    本文主要介紹了React如何通過useContext特性實現(xiàn)組件數(shù)據(jù)傳遞,文中有相關(guān)的代碼示例供大家參考,對我們學(xué)習(xí)React有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • React生命周期與父子組件間通信知識點詳細講解

    React生命周期與父子組件間通信知識點詳細講解

    生命周期函數(shù)指在某一時刻組件會自動調(diào)用并執(zhí)行的函數(shù)。React每個類組件都包含生命周期方法,以便于在運行過程中特定的階段執(zhí)行這些方法
    2022-11-11
  • react實現(xiàn)拖拽模態(tài)框

    react實現(xiàn)拖拽模態(tài)框

    這篇文章主要為大家詳細介紹了react實現(xiàn)拖拽模態(tài)框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React組件之間的通信的實例代碼

    React組件之間的通信的實例代碼

    本篇文章主要介紹了React組件間通信的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • useCallback和useMemo的正確用法詳解

    useCallback和useMemo的正確用法詳解

    這篇文章主要為大家介紹了useCallback和useMemo的正確用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論