React Hook基本使用


簡單說一下為什么我會了解到Hook API吧。之前寫React只會用class組件的方法,但是新項目使用到了HOOK,然后被迫學習這個API。

為什么要使用Hook?

根據官方文檔介紹:Hook是React16.8的新增特性。它可以讓你在不編寫class的情況下使用state以及其他的React特性。

Effect Hook

了解這個API之前先弄懂兩個名詞“副作用”與“作用”。其實他們是等同的是 你之前在使用React組件中執行過數據獲取、訂閱或者手動修改過的操作。

useEffect就是一個Effect Hook,給函數組件增加了操作副作用的能力。它與class組件中的componentDidMount、componentDidUpdat和componentWillUnmount作用相同。只是被合成了一個API。

使用:

import React, {useState, useEffect } from 'react';
function Demo() {
   const [count, setCount] = useState() ;
   // 相當於componentDidMount 和 componentDidUpdate:
   useEffect(() => {
       // 使用瀏覽器API更新頁面標題
       document.title = 'You clicked ${count} times';
    }) ;
    return (
      <div>
          <p>You clicked {count} times</p>
          <button onClick={() => setCount(count + 1)}>
           Click me  
      </div>
    )
}         

  當你調用useEffect時。就是告訴React在完成對Dom的更改后運行你的'副作用'函數。

但是上面這個Demo存在一個問題。就是頁面會一直調用userEffect里的內容,導致性能問題。

解決方法:

useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // 僅在 count 更改時更新

當我們使用[count]為第二個參數時,它便會去監聽state里的count如果一致則不執行effect,如果不一致,React會再次調用effect.且數組中如果有多個元素,只要其中一個改變也會在次調用effect。

如果你傳入一個空數組([]),那么你將只會運行一次effect(僅在組件掛載和卸載時執行)這就告訴React你的effect不依賴於props或state中的任何值。effect內部的props和state就會一直擁有其初始值。

清除effect

在React class中,我們通常會用componentDidMount中設置訂閱,並在componentWillUnmount中清除。下面是effect清除

useEffect(() => {
  const subscription = props.source.subscribe();
  return () => {
    // 清除訂閱
    subscription.unsubscribe();
  };
});

清除可以防止引起內在泄漏,而清除的處理是在React組件卸載時執行。

Hook使用規則注意

1.只能在函數最外層調用Hook。不能在循環、條件或者子函數中調用 。

2.只能在React的函數組件中調用Hook。

 搜集知識點來源:

1)https://zh-hans.reactjs.org/docs/hooks-intro.html(React官網)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM