useRef
Subject: React
π What is useRef
?
useRef
is a React Hook that creates a mutable reference β an object that holds a .current
property. This reference:
- Persists across renders
- Does not trigger a re-render when updated
π§ When to Use useRef
π§ Common use cases:
- Accessing DOM elements (e.g., focus input)
- Storing mutable values (e.g., timers, previous values)
- Tracking values without re-renders
π¦ Syntax
Part | Meaning |
---|---|
useRef() | Returns an object with .current |
.current | Holds the value you want to persist |
No re-render | Updating .current does not trigger re-renders |
β
1. Accessing DOM Elements with useRef
π Logic:
useRef(null)
creates a referenceref={inputRef}
attaches it to<input>
.current.focus()
focuses the input on button click
β This is the React-safe way to access DOM nodes.
β 2. Storing Mutable Values (Without Re-rendering)
π Logic:
- Tracks render count without causing re-render
- Ideal for logging/debugging render frequency
β 3. Hold Previous Value
π Logic:
- Saves previous state value for comparison/display
.current
acts like a persistent memory box
π useRef
Behavior Summary
Property | Behavior |
---|---|
.current | Holds reference value |
Persistence | Value preserved across re-renders |
Re-render? | β Changing .current does not trigger re-render |
DOM access | β Can access native HTML elements |
JSX usage | Attach via ref={myRef} |
π Common Use Cases
Use Case | Example |
---|---|
Input focus control | Focus when component mounts |
Scroll to element | Scroll a div into view |
Countdown timer ID | Store timer ID in .current |
Save previous state | Track old value of state or props |
Skip first render | Track first load to prevent initial effect |
β οΈ Doβs and Donβts
β Do | β Donβt |
---|---|
Use for DOM access | Donβt use like state |
Use for values between renders | Donβt update expecting re-render |
Use to track things silently | Donβt use for UI-driven state changes |
π Summary Table
Feature | Description |
---|---|
useRef() | Hook to store values without triggering re-render |
.current | Mutable value that persists between renders |
DOM Access | Attach via ref={...} to manipulate DOM elements |
Non-UI Storage | Store timers, counters, previous values, or any reference |
Advertisement Slot 1
Advertisement Slot 2