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

PartMeaning
useRef()Returns an object with .current
.currentHolds the value you want to persist
No re-renderUpdating .current does not trigger re-renders

βœ… 1. Accessing DOM Elements with useRef

πŸ” Logic:

  • useRef(null) creates a reference
  • ref={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

PropertyBehavior
.currentHolds reference value
PersistenceValue preserved across re-renders
Re-render?❌ Changing .current does not trigger re-render
DOM accessβœ… Can access native HTML elements
JSX usageAttach via ref={myRef}

πŸ” Common Use Cases

Use CaseExample
Input focus controlFocus when component mounts
Scroll to elementScroll a div into view
Countdown timer IDStore timer ID in .current
Save previous stateTrack old value of state or props
Skip first renderTrack first load to prevent initial effect

⚠️ Do’s and Don’ts

βœ… Do❌ Don’t
Use for DOM accessDon’t use like state
Use for values between rendersDon’t update expecting re-render
Use to track things silentlyDon’t use for UI-driven state changes

πŸ“Œ Summary Table

FeatureDescription
useRef()Hook to store values without triggering re-render
.currentMutable value that persists between renders
DOM AccessAttach via ref={...} to manipulate DOM elements
Non-UI StorageStore timers, counters, previous values, or any reference

πŸ‘‰ Next: Explore useReducer ➑️