useRef 是 React 鉤子,允許建立對值或 DOM 元素的持久參考。與用於管理觸發重新渲染的狀態的 useState 不同,useRef 主要用於副作用或直接存取 DOM 元素。
useRef 鉤子特別有用:
useRef 鉤子傳回一個具有 .current 屬性的物件。當您呼叫 useRef 時,它會建立對您作為參數傳遞的值的持久性參考。此引用儲存在傳回物件的 .current 屬性中。
要建立引用,只需使用初始值呼叫 useRef 即可。
import { useRef} from 'react' const App = () => { const countRef = useRef(0) return (...) } export default App
在上面的範例中,countRef 是初始值 0 的參考。
要存取參考值,只需呼叫帶有 .current 屬性的 countRef 物件
import { useRef} from 'react' const App = () => { const countRef = useRef(0) const increment = () => { countRef.current } return () } export default AppCount: {countRef.current}
在上面的範例中,如果您按一下按鈕,它將呼叫增量函數,這將增加countRef,但計數不會在
Count: {countRef.current}
處更新,因為更新了useRef不會導致像useState. 這樣的重新渲染將程式碼更新為下面的範例以獲得您期望的結果。
import { useRef, useState } from 'react' const App = () => { const countRef = useRef(0) const [count, setCount] = useState(0) const increment = () => { countRef.current setCount(countRef.current) } return () } export default AppCount: {count}
可以使用 useRef 鉤子來存取和更改 html 元素的屬性
const App = () => { const inputRef = useRef(null) const handleFocus = () => { inputRef.current.focus() } return( ) }
與 useState 或變數不同,useRef 可以在重新渲染之間傳遞值和數據,例如快取數據或配置設定。
在某些情況下,使用 useRef 可以透過避免不必要的重新渲染來幫助元件最佳化。就像如果您有一個渲染大量項目清單的元件,您可以使用 useRef 快取它,並且僅修改重新渲染已更改的項目。
如果您嘗試像這樣將引用傳遞給您自己的元件
const inputRef = useRef(null); return;
您可能會在控制台中收到錯誤:
警告:不能給函數元件提供引用。嘗試存取此引用將失敗。您的意思是使用 React.forwardRef() 嗎?
要解決此問題,請使用forwardRef 包裝自訂元件,如下所示:
const inputRef = useRef(null); return;
自訂元件:
import { forwardRef } from 'react'; const MyInput = forwardRef(({ value, onChange }, ref) => { return ( ); }); export default MyInput;
useRef 是一個功能強大的鉤子,主要用於副作用使用,例如在重新渲染之間快取資料或存取 DOM 元素。它是 React 應用程式中效能優化和實現特定功能的絕佳工具。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3