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

使用React?Hooks模擬生命周期的實現(xiàn)方法

 更新時間:2023年02月08日 09:15:08   作者:barnett_y  
這篇文章主要介紹了使用React?Hooks模擬生命周期,本文舉例說明如何使用 hooks 來模擬比較常見的 class 組件生命周期,需要的朋友可以參考下

前言

在 React 16.8 之前,函數組件只能是無狀態(tài)組件,也不能訪問 react 生命周期。hook 做為 react 新增特性,可以讓我們在不編寫 class 的情況下使用 state 以及其他的 react 特性,例如生命周期。接下來我們便舉例說明如何使用 hooks 來模擬比較常見的 class 組件生命周期。

constructor

class 組件

class Example extends Component {
    constructor() {
        super();
        this.state = {
            count: 0
        }
    }
    render() {
      return null;
  }
}

函數組件不需要構造函數,可以通過調用 useState 來初始化 state

function Example() {
  const [count, setCount] = useState(0);
  return null;
}

componentDidMount

class 組件訪問 componentDidMount

class Example extends React.Component {
  componentDidMount() {
    console.log('I am mounted!');
  }
  render() {
    return null;
  }
}

使用 hooks 模擬 componentDidMount

function Example() {
  useEffect(() => console.log('mounted'), []);
  return null;
}

useEffect 擁有兩個參數,第一個參數作為回調函數會在瀏覽器布局和繪制完成后調用,因此它不會阻礙瀏覽器的渲染進程。
第二個參數是一個數組

  • 當數組存在并有值時,如果數組中的任何值發(fā)生更改,則每次渲染后都會觸發(fā)回調。
  • 當它不存在時,每次渲染后都會觸發(fā)回調。
  • 當它是一個空列表時,回調只會被觸發(fā)一次,類似于 componentDidMount。

shouldComponentUpdate

class 組件訪問 shouldComponentUpdate

shouldComponentUpdate(nextProps, nextState){
  console.log('shouldComponentUpdate')
  // return true 更新組件
  // return false 則不更新組件
}

hooks 模擬 shouldComponentUpdate

const MyComponent = React.memo(
    _MyComponent, 
    (prevProps, nextProps) => nextProps.count !== prevProps.count
)

React.memo 包裹一個組件來對它的 props 進行淺比較,但這不是一個 hooks,因為它的寫法和 hooks 不同,其實React.memo 等效于 PureComponent,但它只比較 props。

componentDidUpdate

class 組件訪問 componentDidUpdate

componentDidMount() {
  console.log('mounted or updated');
}
 
componentDidUpdate() {
  console.log('mounted or updated');
}

使用 hooks 模擬 componentDidUpdate

useEffect(() => console.log('mounted or updated'));

值得注意的是,這里的回調函數會在每次渲染后調用,因此不僅可以訪問 componentDidUpdate,還可以訪問componentDidMount,如果只想模擬 componentDidUpdate,我們可以這樣來實現(xiàn)。

const mounted = useRef();
useEffect(() => {
  if (!mounted.current) {
    mounted.current = true;
  } else {
   console.log('I am didUpdate')
  }
});

useRef 在組件中創(chuàng)建“實例變量”。它作為一個標志來指示組件是否處于掛載或更新階段。當組件更新完成后在會執(zhí)行 else 里面的內容,以此來單獨模擬 componentDidUpdate。

componentWillUnmount

class 組件訪問 componentWillUnmount

componentWillUnmount() {
  console.log('will unmount');
}

hooks 模擬 componentWillUnmount

useEffect(() => {
  return () => {
    console.log('will unmount');
  }
}, []);

當在 useEffect 的回調函數中返回一個函數時,這個函數會在組件卸載前被調用。我們可以在這里面清除定時器或事件監(jiān)聽器。

總結

  • 引入 hooks 的函數組件功能越來越完善,在多數情況下,我們完全可以使用 hook 來替代 class 組件。并且使用函數組件也有以下幾點好處。
  • 純函數概念,同樣的 props 會得到同樣的渲染結果??梢允褂煤瘮到M合,嵌套,實現(xiàn)功能更加強大的組件。組件不會被實例化,整體渲染性能得到提升。
  • 但是 hooks 模擬的生命周期與class中的生命周期不盡相同,我們在使用時,還是需要思考業(yè)務場景下那種方式最適合。

參考鏈接

blog.solutotlv.com/react-class…

dev.to/trentyang/r…

到此這篇關于使用React Hooks模擬生命周期的文章就介紹到這了,更多相關React Hooks模擬生命周期內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • react實現(xiàn)簡單的拖拽功能

    react實現(xiàn)簡單的拖拽功能

    這篇文章主要為大家詳細介紹了react實現(xiàn)簡單的拖拽功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • React Native功能豐富的Toast通知庫

    React Native功能豐富的Toast通知庫

    這篇文章主要為大家介紹了React Native功能豐富的Toast通知庫使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 2個奇怪的react寫法

    2個奇怪的react寫法

    大家好,我卡頌。雖然React官網用大量篇幅介紹最佳實踐,但因JSX語法的靈活性,所以總是會出現(xiàn)奇奇怪怪的React寫法。本文介紹2種奇怪(但在某些場景下有意義)的React寫法。也歡迎大家在評論區(qū)討論你遇到過的奇怪寫法
    2023-03-03
  • React狀態(tài)管理的簡明指南

    React狀態(tài)管理的簡明指南

    Redux 是React最常用的集中狀態(tài)管理工具,本文主要介紹了React狀態(tài)管理的簡明指南,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • React Native 集成 ArcGIS 地圖的詳細過程

    React Native 集成 ArcGIS 地圖的詳細過程

    ArcGIS官方提供了 JavaScript SDK,也提供了 ArcGIS-Runtime-SDK-iOS,但是并沒有提供 React Native的版本,所以這里使用了 react-native-arcgis-mapview 庫,本文給大家介紹React Native 集成 ArcGIS 地圖的詳細過程,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • React中使用echarts-for-react的方法示例

    React中使用echarts-for-react的方法示例

    echarts-for-react則是ECharts在React生態(tài)中的官方封裝組件,它讓開發(fā)者能夠輕松地在React應用中集成ECharts圖表,本文就來介紹一下echarts-for-react的使用,感興趣的可以了解一下
    2025-03-03
  • 深入解析React?Hooks?閉包陷阱

    深入解析React?Hooks?閉包陷阱

    這篇文章主要為大家介紹了React Hooks閉包陷阱的深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 關于react-router中的Prompt組件使用心得

    關于react-router中的Prompt組件使用心得

    這篇文章主要介紹了關于react-router中的Prompt組件學習心得,Prompt組件作用是,在用戶準備離開該頁面時,?彈出提示,?返回true或者false,?如果為true,?則離開頁面,?如果為false,?則停留在該頁面,本文結合示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • antd+react中upload手動上傳單限制上傳一張

    antd+react中upload手動上傳單限制上傳一張

    本文主要介紹了antd+react中upload手動上傳單限制上傳一張,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 詳解React中setState回調函數

    詳解React中setState回調函數

    這篇文章主要介紹了詳解React中setState回調函數,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06

最新評論

甘南县| 镇平县| 山东| 平罗县| 达尔| 台江县| 老河口市| 灵台县| 荆门市| 安陆市| 祁门县| 太白县| 江达县| 彭泽县| 永康市| 林口县| 怀仁县| 土默特右旗| 宁安市| 石棉县| 老河口市| 霍邱县| 芒康县| 安龙县| 容城县| 天门市| 高雄市| 绩溪县| 金川县| 昔阳县| 泰州市| 夏津县| 洪雅县| 翁源县| 宁陵县| 定远县| 博野县| 若尔盖县| 太仆寺旗| 辰溪县| 海淀区|