返回日常隨筆1. 為什麼是
2026/4/22 React, 技術
useRef:掌握 React 的「儲物櫃」與 DOM 操控
什麼是 useRef?
useRef 回傳一個帶有 current 屬性的物件。它有兩個最主要的用途:
- 存取 DOM 元素:直接抓取網頁上的 HTML 標籤(例如讓輸入框聚焦)。
- 儲存「不需要渲染」的資料:存放在裡面的資料改變時,不會觸發組件重新渲染。
核心觀念:
- 如果您希望改了某個值,畫面要跟著變,請用
useState; - 如果您只是想偷偷記住一個值,或是要直接控制
HTML標籤,請用useRef。
語法拆解
javascript source casejavascript
您可以把 useRef 想像成一個**「掛在組件身上的儲物櫃」**。
1. 為什麼是 .current?
當您執行 const myRef = useRef(0); 時,React 實際上是幫您建立了一個像這樣的物件:
javascript source casejavascript
為什麼非要包成物件?因為在 JavaScript 中,物件是傳址(Pass by Reference)。這能保證 React 在多次重新渲染組件時,手上拿到的始終是同一個「儲物櫃」,所以裡面的 current 才能一直保存著。
2. 取值與修改
- 取值:
myRef.current(單純讀取,不會觸發渲染) - 改值:
myRef.current = "新資料"(靜悄悄地換掉內容,React 不會被驚動)
使用 useRef 的常見情境
- 管理焦點、文字選取或媒體播放
- 整合第三方 DOM 函式庫 (如 D3.js 或 jQuery)
- 儲存「前一個狀態」 (Previous State)
範例:直接操控 DOM
我們常希望使用者點開頁面時,游標自動停在「訂單編號」輸入框。
codepen 範例
範例:儲存不觸發渲染的變數
假設您要記錄使用者「點擊了幾次按鈕」,但不希望每次點擊都重新渲染。
codepen 範例
useRef vs useState
| 特性 | useState | useRef |
|---|---|---|
| 改變值時觸發渲染 | 會 | 否 |
| 非同步更新 | 是 | 否 (立即生效) |
| 用途 | 驅動畫面的資料 | 存取 DOM 或私有變數 |
分享這段生活共鳴 / Share
若這段文字觸動了您,歡迎分享給更多共鳴者。
延伸閱讀 / Related Stories
React
useEffect:與外部世界互動的橋樑
什麼是 useEffect? 當組件「渲染後」需要執行動作(如:抓取資料、訂閱事件、修改 DOM),就要用 useEffect。 useEffect 讓您在組件「渲染後」執行某些操作。這些操作通常不直接參與畫面繪製,而是與外部世界互動。 核心觀念: - React 的渲染過程應該是純粹的(輸入什麼
React
React Hook Form:頂尖表單處理實戰
為什麼需要 React Hook Form? 在傳統 React 中處理表單(使用 useState),每當您在輸入框打一個字,整個組件就會重新渲染(Re-render)一次。當表單有 20、30 個欄位時,電腦會開始變慢,程式碼也會變得異常臃腫。 React Hook Form 的核心優勢: -