iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
Modern Web

前端技術研究系列 第 14

React 生命週期 下集 - 利用 Hook 呈現

  • 分享至 

  • xImage
  •  

首先要先來介紹 useEffect。

基本上他們三個(componentDidMount()/componentDidUpdate()/componentWillUnmount())的功能都能利用useEffect來取代

useEffect長相如下,不過仍可以透過第二個參數的有無來達到 生命週期的型態,比較特別的是當我一個 event 導致了兩個dependency的 state 同時改變,卻只會觸發一次 useEffect ,很有趣吧。(還是其實只有我不知道 /images/emoticon/emoticon20.gif

useEffect(() => {
  // ...
}, [dependency]);
// 有值表示,當dependency改變時這個 useEffect 會被觸發

接下來開始利用 hook 來呈現生命週期囉

Mount:元件被渲染到畫面上
我們可以利用 const [state, setState] = useState(initialState);
來達到 constructor() 相同效果,建立state 且賦予初始值,而 useState 的 setState 就等於 class component 裡的this.setState({ key: value })
useEffect部分: dependency設定為空,僅載入時觸發⇒componentDidMount()

useEffect(() => {
  // ...
}, []);


Update:元件的內容因為資料的更動而重新渲染
無設定dependency,有任何useState 改變即觸發,若在這裡放進了setState ,也會踩進無限迴圈的雷。⇒componentDidUpdate()

useEffect(() => {
  // ...
});


Unmount
useEffect裡增加了 return , component 從畫面上消失時被觸發(嚴格說起來是不再引用該 component 時被觸發)⇒componentWillUnmount()

useEffect(() => {
  return (() => {
      // ...
    });
}, []);

// 所以利用 useEffect 也能將 componentDidMount()&componentWillUnmount()寫一起
useEffect(() => {
  // componentDidMount()
  return (() => {
      // componentWillUnmount
    });
}, []);

這邊有codePen可以配合服用。
感謝閱讀~


上一篇
react 生命週期 上集
下一篇
Redux Saga 基礎認識
系列文
前端技術研究30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言