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

react組件memo useMemo useCallback使用區(qū)別示例

 更新時間:2022年07月25日 10:52:24   作者:SODA_HA  
這篇文章主要為大家介紹了react組件memo useMemo useCallback使用區(qū)別的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

memo用來優(yōu)化函數組件的重復渲染行為,針對的是一個組件

useMemo返回一個memoized的值

本質都是用同樣的算法來判定依賴是否發(fā)生改變,繼而決定是否觸發(fā)memo或者useMemo中的邏輯,利用memo就可以避免不必要的重復計算,減少資源浪費

useCallback返回一個memoized的函數

useMemo和useCallback都接收兩個參數,第一個參數為fn,第二個參數為[],數組中是變化依賴的參數 memo則可以直接作用于組件,例如

    export default memo(Mycomponent)

useMemo和useEffect的執(zhí)行時機是不一致的:useEffect執(zhí)行的是副作用,所以一定是在渲染之后執(zhí)行的,useMemo是需要有返回值的,而返回值可以直接參與渲染的,所以useMemo是在渲染期間完成的

memo使用

    // 父組件
    const Parent = ()=>{
        const [count, setCount] = useState(1)
        const addCount = ()=>{
           setCount(count + 1)
        }
        return(
            <>
             <div onClick={addCount}>計數: {count}</div>
             <Child />
            </>
        )
    }
    // 子組件
    const Child = memo(()=>{
        console.log('child start---')
        return(
            <div>child...</div>
        )
    })
    // 使用memo后,子組件的props或者state沒有變化時,將不會對子組件進行渲染

useMemo使用

   const sum = ()=>{
      return a+b
   }
   const result = useMemo(()=>{sum()},[a,b])
   // 只有在a或者b的值變化時才會觸發(fā)sum函數執(zhí)行

useCallback使用

    // 父組件,給子組件傳遞name和changeName方法
    const Parent = () => {
      const [count, setCount] = useState(1);
      const [name, setName] = useState("bbz");
      const addCount = () => {
        setCount(count + 1);
      };
      const changeName = useCallback((n) => {
        setName(n);
      }, []);
      return (
        <>
          <div onClick={addCount}>計數: {count}</div>
          <Child name={name} changeName={changeName} />
        </>
      );
    };
    // 子組件
    const Child = ({ name, changeName }) => {
      console.log("child start---");
      return (
        <div
          onClick={() => {
            changeName("bobozai");
          }}
        >
          child comps: {name}
        </div>
      );
    };
    // 如果不使用useCallback,則點擊父組件計數的同時,子組件會console進行渲染,
    // 因為更新count時父組件會重新渲染,導致重新生成了一個changeName函數,
    // 所以子組件的props變了,導致子組件會重新渲染
    // 而對changeName函數用useCallback進行包裹,則對函數進行緩存不會重新生成

以上就是react組件memo useMemo useCallback使用區(qū)別的詳細內容,更多關于react組件memo useMemo useCallback的資料請關注腳本之家其它相關文章!

相關文章

  • 如何在React?Native開發(fā)中防止滑動過程中的誤觸

    如何在React?Native開發(fā)中防止滑動過程中的誤觸

    在使用React?Native開發(fā)的時,當我們快速滑動應用的時候,可能會出現誤觸,導致我們會點擊到頁面中的某一些點擊事件,誤觸導致頁面元素響應從而進行其他操作,表現出非常不好的用戶體驗。
    2023-05-05
  • React Native仿美團下拉菜單的實例代碼

    React Native仿美團下拉菜單的實例代碼

    本篇文章主要介紹了React Native仿美團下拉菜單的實例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 淺談react useEffect閉包的坑

    淺談react useEffect閉包的坑

    筆者最近用react useEffect閉包,其中踩到了一些坑在此與大家分享一下。需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • ReactQuery?渲染優(yōu)化示例詳解

    ReactQuery?渲染優(yōu)化示例詳解

    這篇文章主要為大家介紹了ReactQuery?渲染優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • react項目打包后點擊index.html頁面出現空白的問題

    react項目打包后點擊index.html頁面出現空白的問題

    這篇文章主要介紹了react項目打包后點擊index.html頁面出現空白的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 淺談在react中如何實現掃碼槍輸入

    淺談在react中如何實現掃碼槍輸入

    這篇文章主要介紹了淺談在react中如何實現掃碼槍輸入,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • react使用websocket實時通信方式

    react使用websocket實時通信方式

    這篇文章主要介紹了react使用websocket實時通信方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • React中Redux Hooks的使用詳解

    React中Redux Hooks的使用詳解

    這篇文章主要介紹了React Redux Hooks的使用詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • JS中使用react-tooltip插件實現鼠標懸浮顯示框

    JS中使用react-tooltip插件實現鼠標懸浮顯示框

    前段時間遇到的一個需求,要求鼠標懸停顯示使用描述, 用到了react-tooltip插件,今天寫一個總結,感興趣的朋友跟隨小編一起看看吧
    2019-05-05
  • ReactNative實現圖片上傳功能的示例代碼

    ReactNative實現圖片上傳功能的示例代碼

    本篇文章主要介紹了ReactNative實現圖片上傳功能的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-07-07

最新評論