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
.currentacts 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