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

React中的useMemo 和 useEffect 執(zhí)行順序

 更新時(shí)間:2025年01月10日 11:02:49   作者:灰色人生qwer  
在 React 組件的渲染過程中,useMemo 和 useEffect 的執(zhí)行順序是不同的,本文給大家介紹React中的useMemo 和 useEffect 哪個(gè)先執(zhí)行,感興趣的朋友一起看看吧

在 React 組件的渲染過程中,useMemo 和 useEffect 的執(zhí)行順序是不同的。具體來說:

  • useMemo 先執(zhí)行:useMemo 是在 渲染階段 執(zhí)行的,它的作用是緩存計(jì)算結(jié)果,確保在渲染過程中可以直接使用緩存的值。
  • useEffect 后執(zhí)行:useEffect 是在 提交階段 執(zhí)行的,它的作用是處理副作用(如數(shù)據(jù)獲取、DOM 操作等),并且是在 DOM 更新之后才運(yùn)行。

詳細(xì)執(zhí)行順序

組件渲染階段:

  • React 調(diào)用組件的渲染方法(函數(shù)組件的函數(shù)體或類組件的 render 方法)。
  • 在渲染過程中,useMemo 會(huì)被執(zhí)行,計(jì)算并緩存值。
  • 如果依賴項(xiàng)沒有變化,useMemo 會(huì)直接返回緩存的值,避免重復(fù)計(jì)算。

DOM 更新階段:

  • React 將組件的渲染結(jié)果應(yīng)用到 DOM 上,更新 UI。

提交階段:

  • 在 DOM 更新完成后,React 會(huì)執(zhí)行 useEffect 中的副作用函數(shù)。
  • 如果 useEffect 有清理函數(shù)(返回的函數(shù)),它會(huì)在組件卸載或依賴項(xiàng)變化時(shí)執(zhí)行。

示例代碼

import React, { useMemo, useEffect, useState } from 'react';
function MyComponent({ a, b }) {
  // useEffect 寫在 useMemo 上面
  useEffect(() => {
    console.log('useEffect: Side effect after DOM update');
    return () => {
      console.log('useEffect: Cleanup');
    };
  }, [a, b]);
  // useMemo 寫在 useEffect 下面
  const memoizedValue = useMemo(() => {
    console.log('useMemo: Calculating expensive value...');
    return a + b;
  }, [a, b]);
  console.log('Render: Component rendering...');
  return (
    <div>
      <p>Memoized Value: {memoizedValue}</p>
    </div>
  );
}
function App() {
  const [a, setA] = useState(1);
  const [b, setB] = useState(2);
  return (
    <div>
      <MyComponent a={a} b= />
      <button onClick={() => setA(a + 1)}>Increment A</button>
      <button onClick={() => setB(b + 1)}>Increment B</button>
    </div>
  );
}

控制臺(tái)輸出順序

當(dāng)組件首次渲染時(shí):

Render: Component rendering...
useMemo: Calculating expensive value...
useEffect: Side effect after DOM update

當(dāng) a 或 b 變化時(shí):

Render: Component rendering...
useMemo: Calculating expensive value...
useEffect: Cleanup
useEffect: Side effect after DOM update

總結(jié)

  • useMemo 在渲染階段執(zhí)行:無論它寫在 useEffect 上面還是下面,它都會(huì)在組件渲染時(shí)執(zhí)行。
  • useEffect 在提交階段執(zhí)行:它總是在 DOM 更新后執(zhí)行,與代碼書寫順序無關(guān)。
  • React 的執(zhí)行順序是固定的:useMemo 先執(zhí)行,useEffect 后執(zhí)行。

如果你需要在渲染階段避免昂貴的計(jì)算,使用 useMemo;如果你需要在 DOM 更新后執(zhí)行某些操作(如數(shù)據(jù)獲取或訂閱),使用 useEffect。

到此這篇關(guān)于React中的useMemo 和 useEffect 執(zhí)行順序的文章就介紹到這了,更多相關(guān)React useMemo 和 useEffect 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • react-native只保留3x圖原理解析

    react-native只保留3x圖原理解析

    這篇文章主要為大家介紹了react-native只保留3x圖原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • react+react-beautiful-dnd實(shí)現(xiàn)代辦事項(xiàng)思路詳解

    react+react-beautiful-dnd實(shí)現(xiàn)代辦事項(xiàng)思路詳解

    這篇文章主要介紹了react+react-beautiful-dnd實(shí)現(xiàn)代辦事項(xiàng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • React?hooks中useState踩坑之異步的問題

    React?hooks中useState踩坑之異步的問題

    這篇文章主要介紹了React?hooks中useState踩坑之異步的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 淺談webpack+react多頁面開發(fā)終極架構(gòu)

    淺談webpack+react多頁面開發(fā)終極架構(gòu)

    這篇文章主要介紹了淺談webpack+react多頁面開發(fā)終極架構(gòu),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • react-router4 嵌套路由的使用方法

    react-router4 嵌套路由的使用方法

    本篇文章主要介紹了react-router4 嵌套路由的使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • React中的useEffect四種用法分享

    React中的useEffect四種用法分享

    這篇文章主要給大家分享React中的useEffect四種用法,useEffect中 觸發(fā)更新,重復(fù)的 useEffect,依賴值觸發(fā)回調(diào),useEffect 的返回值,通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • ReactNative踩坑之配置調(diào)試端口的解決方法

    ReactNative踩坑之配置調(diào)試端口的解決方法

    本篇文章主要介紹了ReactNative踩坑之配置調(diào)試端口的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • React 進(jìn)入頁面后自動(dòng) focus 到某個(gè)輸入框的解決方案

    React 進(jìn)入頁面后自動(dòng) focus 到某個(gè)輸入框的解決方案

    React.js 當(dāng)中提供了 ref 屬性來幫助我們獲取已經(jīng)掛載的元素的 DOM 節(jié)點(diǎn),你可以給某個(gè) JSX 元素加上 ref屬性,這篇文章主要介紹了React 進(jìn)入頁面以后自動(dòng) focus 到某個(gè)輸入框,需要的朋友可以參考下
    2024-02-02
  • React中的render何時(shí)執(zhí)行過程

    React中的render何時(shí)執(zhí)行過程

    這篇文章主要介紹了React中的render何時(shí)執(zhí)行過程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • 原生+React實(shí)現(xiàn)懶加載(無限滾動(dòng))列表方式

    原生+React實(shí)現(xiàn)懶加載(無限滾動(dòng))列表方式

    這篇文章主要介紹了原生+React實(shí)現(xiàn)懶加載(無限滾動(dòng))列表方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論