在 React 應用程序中,useState 和 useRef 是 React Hooks 的兩種最常見的使用方式,用于管理狀態和操作 DOM 元素。本文將討論這兩種 Hooks 的工作原理、常見用法,以及兩者之間的區別和聯系。
區別
useState 是 React Hooks 的基礎,它允許您在函數式組件中管理狀態和更新狀態。它接收一個參數,即初始狀態,并返回一個數組,包含當前狀態和一個函數,用于更新狀態。為了獲取最新的狀態,您可以使用 useState 內置的函數來獲取最新的狀態。
比如上面這段代碼,const [isVisible, setIsVisible] = useState(false); 我們給useState函數一個初值false,返回了一個數組,包含了初值為false的isVisible變量,以及用來更新這個變量的方法的函數setIsVisible。
這里有一點值得注意:調用setIsVisible函數會使isVisible變量更新,但是這個狀態如果你立馬用consol.log去打印是得不到最新值的。需要使用useEffect的第二個參數來監聽我們需要變化的值,以獲取變化后的最新值。或者說組件重新渲染后,我們就能看到最新值了。
useRef 也是 React Hooks 的一種,它的作用是提供一個可以在函數式組件中訪問的全局變量,而不必渲染組件。它接受一個參數,即初始參考值,并返回一個可以訪問和修改的 Ref 對象。它的一個主要用途是操作 DOM 元素,因為它可以讓您在函數式組件中操作 DOM 元素而不必使用原生 JavaScript 或者使用類似 jQuery 之類的庫。
兩者之間最大的區別是 useState 用于管理狀態,而 useRef 用于操作 DOM 元素。另外,useState 返回的是當前狀態和一個更新狀態的函數,而 useRef 返回的是一個全局可以訪問和修改的 Ref 對象。useState 用于保存和更新組件的狀態,而 useRef 用于引用 DOM 元素或者保存值。useState 的值會被重新渲染,而 useRef 的值不會。
- useState的值在每個rernder中都是獨立存在的,而useRef.current則更像是相對于render函數的一個全局變量,每次它會保持render的最新狀態。(useState異步更新其值,useRef同步更新)
- useState觸發重新渲染,useRef不觸發。
- useRef() 不僅用于DOM引用。“ ref”對象是通用容器,其當前屬性是可變的,并且可以保存任何值,類似于類的實例屬性。
- 變量是決定視圖圖層渲染的變量,請使用useState,其他用途useRef
- useRef特性:可變的ref對象,持久化。
聯系
雖然兩者之間有區別,但它們之間也有一些聯系。首先,它們都是 React Hooks,用于管理組件的狀態。其次,它們都可以使用同樣的hook,即 useEffect(),用于響應狀態更改并執行相應的操作。最后,它們都可以使用 useContext hook 來實現上下文傳遞。
總之,useState 和 useRef 都是 React Hooks 的重要組成分,它們都可以幫助您管理 React 組件的狀態和操作 DOM 元素,但它們之間有明顯的區別,您需要根據自己的需求選擇最合適的鉤子來實現所需的功能。最后,您可以使用同樣的 hook,即 useEffect(),來響應狀態更改并執行相應的操作,而 useContext hook 可以幫助您實現上下文傳遞。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.