iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Modern Web

前端開發之那些我會的與我不會的技術系列 第 21

React Hook: useLayoutEffect的使用與注意事項

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20231006/201627516BbvBrWAy1.jpg

今天要來介紹的是useLayoutEffect這個hook,這個hook和useEffect的使用方式很類似,差別在於useEffect是在畫面已經繪製上去,而useLayoutEffect是在畫面重新繪製以前,而且是個同步的行為,所以使用useLayoutEffect會拖慢瀏覽器繪製畫面的時間導致阻塞,如果可能的話盡量不要使用,使用useEffect可能是個比較好的選擇,但在某些情況下像是必須要拿到畫面的資訊,如元件大小位置的功能,避免畫面更新後才又變更位置或大小產生的閃爍問題就可以考慮使用。官網閃爍範例

使用

useLayoutEffect(setup, dependencies?)

setup是放要執行的程式邏輯的function,會在元件加入,跟useEffect一樣在function裡面retun一個function是cleanup function,在dependence有改變時時會先執行帶有舊版資料的cleanup function再執行帶有更新資料的setup function,dependencies和其他hooks一樣,都是使用Object.is來比較舊資料與新資料,不同才會執行setup。官網範例

getSnapshotBeforeUpdate的hook版本?

並不是!

天真的我一開始看到這個hook,就想都是在畫面更新前執行那不就是**getSnapshotBeforeUpdate的hook版本,但是我忘記了一件事情,在useLayoutEffect 的setup function是拿不到舊的資料的。雖然和getSnapshotBeforeUpdate一樣都是在畫面更新前執行但是一個可以拿到舊的props和state一個無法,所以useLayoutEffect 並不是getSnapshotBeforeUpdate的一個替代品。

參考

https://react.dev/reference/react/useLayoutEffect


上一篇
了解React中的useRef Hook:特性和應用
下一篇
React的新實驗性Hook:use Hook的使用
系列文
前端開發之那些我會的與我不會的技術31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言