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

Component與PureComponent對比解析

 更新時間:2023年03月01日 12:01:33   作者:別哭0摸摸頭  
這篇文章主要為大家介紹了Component與PureComponent解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

題外話

有啥不對的請多多指教,研究的不算很深,記錄為了分享,也為了博采眾長,完善知識。

官方文檔

React.PureComponent 與 React.Component很相似。兩者的區(qū)別在于 React.Component 并未實現(xiàn) shouldComponentUpdate(),而 React.PureComponent 中以淺層對比 prop 和 state 的方式來實現(xiàn)了該函數(shù)。

官方解釋也很容易理解,React.PureComponentReact.Component中多實現(xiàn)了一個方法,就導致了在組件數(shù)據(jù)發(fā)生變化時,React.PureComponent會先進行和上一次的比較,如果相同,就不會再繼續(xù)更新了。

口說無憑,還是得通過代碼來體會。

對比

先看兩者相同得地方 代碼如下

class Box1 extends React.Component {
  render() {
    console.log('Box1 update');
    return <div>Box1: {this.props.count}</div>;
  }
}
class Box2 extends React.PureComponent {
  render() {
    console.log('Box2 update');
    return <div>Box2: {this.props.count}</div>;
  }
}

先制作2個對比的組件Box1與Box2, 然后制作一個父組件引入其中,并設置一個方法

export default () => {
  const [count, setCount] = React.useState(1);
  console.log('parent update');
  return (
    <div>
      <Box1 count={count}/>
      <Box2 count={count}/>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
};

此時,點擊button按鈕的時候,上述2個Box組件都會進行更新。

這也是最基礎的組件更新。

取消外部數(shù)據(jù)引入

class Box1 extends React.Component {
  render() {
    console.log('Box1 update');
    return <div>Box1</div>;
  }
}
class Box2 extends React.PureComponent {
  render() {
    console.log('Box2 update');
    return <div>Box2</div>;
  }
}
export default () => {
  const [count, setCount] = React.useState(1);
  console.log('parent update');
  return (
    <div>
      <Box1 />
      <Box2 />
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
};

取消Box組件內對外部count的引入

此時頁面更新為

此時會發(fā)現(xiàn)只有Box1重新刷新了一遍,而Box2未重新加載組件,也就是PureComponent內部做了淺比較相同的不會進行更新。

為什么被稱為淺比較

淺比較是指對值類型進行比較,而稍微復雜一點的引用類型(Object),就無法進行判斷了,react內部的更新都是淺比較。

export default () => {
  const [count, setCount] = React.useState({ num: 1 });
  console.log('parent update');
  const click = () => {
    const newCount = count;
    newCount.num = count.num + 1;
    setCount(newCount);
    console.log('update:', count)
  };
  return (
    <div>
      <Box1 />
      <Box2 />
      <button onClick={click}>+1</button>
    </div>
  );
};

此時,父組件內部的count為對象類型,此時進行更新時,頁面不會觸發(fā)任何更新,父組件也不會進行刷新(由于是引用類型,newCount發(fā)生數(shù)據(jù)變化時,count其實已經(jīng)發(fā)生變化,但是頁面并不會有任何的反應)。

由圖可見,子組件和父組件并沒有進行刷新,均未打印。

小知識點

const的不可變定義也是只對于值類型而言,對于引用類型,還是依然可變。上述代碼云清并不會報錯。

說明

上述的一切代碼都是建立在父組件自身更新的基礎上子組件才會刷新,如果我將setCount(count + 1)改為setCount(count + 0),那么,父組件本身不會進行刷新,子組件也就理所當然的不會有任何變化。

另類的不更新

這里的父組件刷新帶動子組件刷新有一種例外的情況。代碼如下

const Parent = ({ children }) => {
  const [count, setCount] = React.useState(1);

  console.log('parent update');
  return (
    <div>
      {children}
      <button onClick={() => setCount(count + 1)}>box2</button>
    </div>
  );
};

export default () => {
  return (
    <Parent>
      <Box1 />
      <Box2 />
    </Parent>
  );
};

將父組件抽離出來,子組件以children的形式引入。 此時頁面點擊發(fā)生的變化為

會發(fā)現(xiàn)不管怎么點擊,只有Parent組件進行刷新,子組件全部都毫無反應。

這個原因我不得而知,可能是因為react生成dom的時候問題,這個等待深入學習后再來解答。

總結

PureComponent多用于抽取本地緩存制作的下拉框組件或者是根據(jù)數(shù)據(jù)字典生成的展示組件,這種固定的組件基本在用戶使用時不會有任何的變化,只在登錄和頁面加載最開始生成。

以上就是Component與PureComponent解析的詳細內容,更多關于Component PureComponent解析的資料請關注腳本之家其它相關文章!

相關文章

  • React Hooks常用場景的使用(小結)

    React Hooks常用場景的使用(小結)

    這篇文章主要介紹了React Hooks常用場景的使用,根據(jù)使用場景分別進行舉例說明,幫助你認識理解并可以熟練運用 React Hooks 大部分特性,感興趣的可以了解一下
    2021-04-04
  • React18從0實現(xiàn)dispatch?update流程

    React18從0實現(xiàn)dispatch?update流程

    這篇文章主要為大家介紹了React18從0實現(xiàn)dispatch?update流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 原生實現(xiàn)一個react-redux的代碼示例

    原生實現(xiàn)一個react-redux的代碼示例

    這篇文章主要介紹了原生實現(xiàn)一個react-redux的代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 基于Webpack5 Module Federation的業(yè)務解耦實踐示例

    基于Webpack5 Module Federation的業(yè)務解耦實踐示例

    這篇文章主要為大家介紹了基于Webpack5 Module Federation的業(yè)務解耦實踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • React+Node實現(xiàn)大文件分片上傳、斷點續(xù)傳秒傳思路

    React+Node實現(xiàn)大文件分片上傳、斷點續(xù)傳秒傳思路

    本文主要介紹了React+Node實現(xiàn)大文件分片上傳、斷點續(xù)傳秒傳思路,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • React組件的生命周期深入理解分析

    React組件的生命周期深入理解分析

    組件的生命周期就是React的工作過程,就好比人有生老病死,自然界有日月更替,每個組件在網(wǎng)頁中也會有被創(chuàng)建、更新和刪除,如同有生命的機體一樣
    2022-12-12
  • React RenderProps模式超詳細講解

    React RenderProps模式超詳細講解

    render props是指一種在 React 組件之間使用一個值為函數(shù)的 prop 共享代碼的技術。簡單來說,給一個組件傳入一個prop,這個props是一個函數(shù),函數(shù)的作用是用來告訴這個組件需要渲染什么內容,那么這個prop就成為render prop
    2022-11-11
  • ReactJs快速入門教程(精華版)

    ReactJs快速入門教程(精華版)

    React 起源于 Facebook 的內部項目,因為該公司對市場上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來架設 Instagram 的網(wǎng)站.這篇文章主要介紹了ReactJs快速入門教程(精華版)的相關資料,需要的朋友可以參考下
    2016-11-11
  • 一文詳解如何使用React監(jiān)聽網(wǎng)絡狀態(tài)

    一文詳解如何使用React監(jiān)聽網(wǎng)絡狀態(tài)

    在現(xiàn)代Web應用程序中,網(wǎng)絡連接是至關重要的,通過監(jiān)聽網(wǎng)絡狀態(tài),我們可以為用戶提供更好的體驗,例如在斷網(wǎng)時顯示有關網(wǎng)絡狀態(tài)的信息,本文將介紹如何使用React監(jiān)聽網(wǎng)絡狀態(tài)的變化,并提供相應的代碼示例
    2023-06-06
  • React Electron生成桌面應用過程

    React Electron生成桌面應用過程

    這篇文章主要介紹了React+Electron快速創(chuàng)建并打包成桌面應用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12

最新評論