最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

介紹

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

forwardRef

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

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

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

舉個例子

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ù)。它可以包裹一個函數(shù)組件,并返回一個經(jīng)過優(yōu)化的組件。

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

const MemoizedComponent = React.memo(MyComponent);

舉個例子

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} />;
};

適用場景

forwardRef 的適用場景

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

memo 的適用場景

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

優(yōu)點缺點

forwardRef 的優(yōu)點:

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

forwardRef 的缺點:

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

memo 的優(yōu)點:

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

memo 的缺點:

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

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

相關文章

  • 聊聊React onClick 傳遞參數(shù)的問題

    聊聊React onClick 傳遞參數(shù)的問題

    很多朋友向小編反映一個問題關于React onClick 傳遞參數(shù)的問題,當點擊刪除按鈕需要執(zhí)行刪除操作,針對這個問題該如何處理呢?下面小編給大家?guī)砹薘eact onClick 傳遞參數(shù)的問題,感興趣的朋友一起看看吧
    2021-10-10
  • react之umi配置國際化語言locale的踩坑記錄

    react之umi配置國際化語言locale的踩坑記錄

    這篇文章主要介紹了react之umi配置國際化語言locale的踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • React ts模式使用http-proxy-middleware代理時訪問報404問題

    React ts模式使用http-proxy-middleware代理時訪問報404問題

    這篇文章主要介紹了React ts模式使用http-proxy-middleware代理時訪問報404問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 解決React報錯Unexpected default export of anonymous function

    解決React報錯Unexpected default export of an

    這篇文章主要為大家介紹了React報錯Unexpected default export of anonymous function解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • react源碼層探究setState作用

    react源碼層探究setState作用

    寫react的時候,踩了幾次坑發(fā)現(xiàn)setstate之后state不會立刻更新,于是判定setstate就是異步的方法,但是直到有一天,我想立刻拿到更新的state去傳參另一個方法的時候,才問自己,為什么setstate是異步的?準確地說,在React內(nèi)部機制能檢測到的地方,setState就是異步的
    2022-10-10
  • React Native自定義路由管理的深入理解

    React Native自定義路由管理的深入理解

    路由管理的功能主要指的頁面跳轉(zhuǎn)、goBack、帶參數(shù)跳轉(zhuǎn)等功能,這篇文章主要給大家介紹了關于React Native自定義路由管理的相關資料,需要的朋友可以參考下
    2021-08-08
  • 解決jest處理es模塊示例詳解

    解決jest處理es模塊示例詳解

    這篇文章主要為大家介紹了解決jest處理es模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 詳解在React中跨組件分發(fā)狀態(tài)的三種方法

    詳解在React中跨組件分發(fā)狀態(tài)的三種方法

    這篇文章主要介紹了詳解在React中跨組件分發(fā)狀態(tài)的三種方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • React?錯誤邊界Error?Boundary使用示例解析

    React?錯誤邊界Error?Boundary使用示例解析

    這篇文章主要為大家介紹了React?錯誤邊界Error?Boundary使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • React文字展開收起組件的實現(xiàn)示例

    React文字展開收起組件的實現(xiàn)示例

    本文主要介紹了React文字展開收起組件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07

最新評論

永年县| 宜宾市| 秦安县| 南安市| 肥乡县| 临颍县| 木兰县| 时尚| 天全县| 怀来县| 射阳县| 南昌县| 许昌市| 綦江县| 武冈市| 韩城市| 罗平县| 淮南市| 霍邱县| 道真| 沈阳市| 宜兴市| 巍山| 伊宁市| 内乡县| 确山县| 资溪县| 确山县| 扶绥县| 灯塔市| 浪卡子县| 大宁县| 九江市| 凌源市| 衡南县| 台前县| 张家界市| 堆龙德庆县| 扶绥县| 罗源县| 垦利县|