亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

react中的forwardRef 和memo的區(qū)別解析

 更新時(shí)間:2023年10月30日 09:50:18   作者:斗  
forwardRef和memo是React中用于性能優(yōu)化和組件復(fù)用的兩個(gè)高階函數(shù),本文給大家介紹react中的forwardRef 和memo的區(qū)別及適用場(chǎng)景,感興趣的朋友跟隨小編一起看看吧

介紹

forwardRef 和 memo 是 React 中用于性能優(yōu)化和組件復(fù)用的兩個(gè)高階函數(shù)。

forwardRef

forwardRef:通常情況下,父組件通過(guò) ref 屬性傳遞給子組件的引用只能是 DOM 元素或類(lèi)組件的實(shí)例。但有時(shí)候我們希望將 ref 傳遞給函數(shù)組件內(nèi)部的某個(gè)具體元素或組件,這時(shí)就可以使用 forwardRef。

forwardRef 可以傳遞一個(gè)回調(diào)函數(shù)來(lái)獲取從父組件傳遞過(guò)來(lái)的 ref,并將其傳遞給內(nèi)部的某個(gè)特定元素或組件。這樣,在父組件中使用 ref 引用子組件時(shí),實(shí)際上獲取到的是子組件內(nèi)部指定的元素或組件。

const MyComponent = React.forwardRef((props, ref) => (
  <div ref={ref}>
    {/* 組件內(nèi)容 */}
  </div>
));

舉個(gè)例子

const ParentComponent = () => {
  const childRef = useRef();

  useEffect(() => {
    console.log(childRef.current); // 子組件內(nèi)指定的元素或組件
  }, []);

  return (
    <div>
      <MyComponent ref={childRef} />
    </div>
  );
};

memo

memo:memo 是用于優(yōu)化函數(shù)組件的渲染性能的高階函數(shù)。它可以包裹一個(gè)函數(shù)組件,并返回一個(gè)經(jīng)過(guò)優(yōu)化的組件。

memo 會(huì)對(duì)函數(shù)組件的輸入屬性進(jìn)行淺比較,如果輸入屬性沒(méi)有發(fā)生變化,那么組件就不會(huì)重新渲染。只有當(dāng)輸入屬性發(fā)生變化時(shí),memo 才會(huì)重新調(diào)用函數(shù)組件進(jìn)行渲染。

const MemoizedComponent = React.memo(MyComponent);

舉個(gè)例子

const MyComponent = ({ text }) => {
  // 組件邏輯
  return <div>{text}</div>;
};
const MemoizedComponent = React.memo(MyComponent);
const ParentComponent = () => {
  const [text, setText] = useState('Hello');
  useEffect(() => {
    setTimeout(() => {
      setText('Hello, World!');
    }, 1000);
  }, []);
  return <MemoizedComponent text={text} />;
};

適用場(chǎng)景

forwardRef 的適用場(chǎng)景

  • 當(dāng)你需要在父組件中直接操作子組件內(nèi)部的特定元素或組件時(shí),可以使用 forwardRef 將 ref 傳遞到函數(shù)組件內(nèi)部的特定元素或組件中。
  • 例如,如果你希望在父組件中調(diào)用子組件的方法、訪問(wèn)子組件的某個(gè) DOM 元素或組件實(shí)例等,就可以使用 forwardRef 來(lái)實(shí)現(xiàn)。
  • 在這種情況下,forwardRef 可以提高代碼的可維護(hù)性和可讀性,使父組件更方便地控制子組件。

memo 的適用場(chǎng)景

  • 當(dāng)組件的輸入屬性沒(méi)有發(fā)生變化時(shí)不希望重新渲染組件時(shí),可以使用 memo 進(jìn)行組件的淺比較。
  • = 通過(guò)避免不必要的重復(fù)渲染,memo 可以顯著提高組件的渲染性能,減少不必要的 DOM 操作,改善用戶(hù)體驗(yàn)。
  • memo 適用于純展示型組件或受控組件等,在這些組件中,輸入屬性的變化不會(huì)導(dǎo)致組件內(nèi)部狀態(tài)的改變,也不會(huì)引起副作用。

優(yōu)點(diǎn)缺點(diǎn)

forwardRef 的優(yōu)點(diǎn):

提供了一種簡(jiǎn)單的方式將 ref 傳遞給函數(shù)組件內(nèi)部的特定元素或組件。
可以讓父組件更方便地操作子組件內(nèi)部的特定元素或組件,提高了代碼的可維護(hù)性和可讀性。

forwardRef 的缺點(diǎn):

增加了組件層級(jí),可能會(huì)導(dǎo)致額外的性能開(kāi)銷(xiāo)。
可能會(huì)破壞組件的封裝性,使組件與父組件之間產(chǎn)生緊密耦合。

memo 的優(yōu)點(diǎn):

通過(guò)淺比較可以避免不必要的組件渲染,提高了組件的性能。
對(duì)于純展示型組件或受控組件等,可以有效減少不必要的 DOM 操作,改善用戶(hù)體驗(yàn)。

memo 的缺點(diǎn):

僅適用于基于輸入屬性的淺比較,如果組件的渲染依賴(lài)于其他因素(如上下文、狀態(tài)等),則可能無(wú)法發(fā)揮優(yōu)化作用。
使用 memo 進(jìn)行淺比較會(huì)引入一定的計(jì)算開(kāi)銷(xiāo),對(duì)于簡(jiǎn)單的組件可能不值得使用。

到此這篇關(guān)于react中的forwardRef 和memo的區(qū)別?的文章就介紹到這了,更多相關(guān)react中的forwardRef 和memo的區(qū)別??jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React項(xiàng)目配置prettier和eslint的方法

    React項(xiàng)目配置prettier和eslint的方法

    這篇文章主要介紹了React項(xiàng)目配置prettier和eslint的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • react清空ant.design中表單內(nèi)容的方法實(shí)現(xiàn)

    react清空ant.design中表單內(nèi)容的方法實(shí)現(xiàn)

    本文主要介紹了react清空ant.design中表單內(nèi)容的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • React的三大屬性你都知道嗎

    React的三大屬性你都知道嗎

    這篇文章主要為大家詳細(xì)介紹了React的三大屬性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • React中g(shù)etDefaultProps的使用小結(jié)

    React中g(shù)etDefaultProps的使用小結(jié)

    React中的getDefaultProps功能允許開(kāi)發(fā)者為類(lèi)組件定義默認(rèn)屬性,提高組件的靈活性和容錯(cuò)性,本文介紹了getDefaultProps的作用、語(yǔ)法以及最佳實(shí)踐,并探討了其他替代方案,如函數(shù)組件中的默認(rèn)參數(shù)、高階組件和ContextAPI等,理解這些概念有助于提升代碼的可維護(hù)性和用戶(hù)體驗(yàn)
    2024-09-09
  • ReactNative實(shí)現(xiàn)的橫向滑動(dòng)條效果

    ReactNative實(shí)現(xiàn)的橫向滑動(dòng)條效果

    本文介紹了ReactNative實(shí)現(xiàn)的橫向滑動(dòng)條效果,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),補(bǔ)充介紹了ReactNative基于寬度變化實(shí)現(xiàn)的動(dòng)畫(huà)效果,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • React中props使用介紹

    React中props使用介紹

    props是組件(包括函數(shù)組件和class組件)間的內(nèi)置屬性,用其可以傳遞數(shù)據(jù)給子節(jié)點(diǎn),props用來(lái)傳遞參數(shù)。組件實(shí)例化過(guò)程中,你可以向其中傳遞一個(gè)參數(shù),這個(gè)參數(shù)會(huì)在實(shí)例化過(guò)程中被引用
    2022-12-12
  • React掌握openapi-typescript-codegen快速生成API客戶(hù)端代碼的過(guò)程

    React掌握openapi-typescript-codegen快速生成API客戶(hù)端代碼的過(guò)程

    openapi-typescript-codegen是一個(gè)開(kāi)源工具,用于根據(jù)OpenAPI規(guī)范自動(dòng)生成TypeScript代碼,包括類(lèi)型定義和API客戶(hù)端代碼,它幫助開(kāi)發(fā)者節(jié)省手動(dòng)編寫(xiě)代碼的時(shí)間,提高開(kāi)發(fā)效率,感興趣的朋友一起看看吧
    2024-11-11
  • 探討JWT身份校驗(yàn)與React-router無(wú)縫集成

    探討JWT身份校驗(yàn)與React-router無(wú)縫集成

    這篇文章主要為大家介紹了JWT身份校驗(yàn)與React-router無(wú)縫集成的探討解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • React組件useReducer的講解與使用

    React組件useReducer的講解與使用

    在React函數(shù)式組件中,我們可以通過(guò)useState()來(lái)創(chuàng)建state,這種state創(chuàng)建方式會(huì)給我們返回兩個(gè)東西state和setState()。
    2023-04-04
  • 在React頁(yè)面重新加載時(shí)保留數(shù)據(jù)的實(shí)現(xiàn)方法總結(jié)

    在React頁(yè)面重新加載時(shí)保留數(shù)據(jù)的實(shí)現(xiàn)方法總結(jié)

    在React頁(yè)面重新加載時(shí)保留數(shù)據(jù),可以通過(guò)多種方法來(lái)實(shí)現(xiàn),常見(jiàn)的方法包括使用瀏覽器的本地存儲(chǔ)(Local Storage 或 Session Storage)、URL參數(shù)、以及服務(wù)器端存儲(chǔ)等,本文給大家總結(jié)了一些具體實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-06-06

最新評(píng)論