useMemo、useCallback使用

在class的時代,我們一般是通過pureComponent來對數(shù)據(jù)進(jìn)行一次淺比較,引入Hook特性后,我們可以使用Memo進(jìn)行性能提升。
一下示例將解釋useMemo的作用:

import React, { ReactElement, useCallback, useState } from "react";

const Example = () => {
  const [n, setN] = useState<number>(0);
  const [m, setM] = useState<number>(10);
  console.log("執(zhí)行最外層盒子了");

  const addN = useCallback(() => {
    setN(n + 1);
  }, [n]);

  const addM = useCallback(() => {
    setM(m + 1);
  }, [m]);
  return (
    <div style={{ textAlign: "center", marginTop: 50 }}>
      最外層盒子
      <Child1 value={n} onClick={addN} />
      <Child2 value={m} onClick={addM} />
      <button onClick={addN}>n+1</button>
      <button onClick={addM}>m+1</button>
    </div>
  );
};

interface childProp {
  value: number;
  onClick?: () => void;
}

const Child1 = React.memo((props: childProp): ReactElement<childProp> => {
  console.log("執(zhí)行子組件1了");
  return <div>子組件1上的n:{props.value}</div>;
});

const Child2 = React.memo((props: childProp): ReactElement<childProp> => {
  console.log("執(zhí)行子組件2了");
  return <div>子組件2上的m:{props.value}</div>;
});

export default Example;

示例圖

執(zhí)行結(jié)果

總結(jié):

  • 使用memo可以幫助我們優(yōu)化性能,讓react不執(zhí)行沒必要的函數(shù)
  • 由于復(fù)雜數(shù)據(jù)類型的地址可能發(fā)生改變,于是傳遞給子組件的props也會發(fā)生變化,這樣還是會執(zhí)行不必要的函數(shù),所以就用到了useMemo這個api
  • useCallbackuseMemo的語法糖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容