Understanding useRef in React
React is an incredibly powerful and flexible JavaScript library for building user interfaces. One of its most useful yet sometimes perplexing concepts are hooks, introduced in version 16.8. Among these hooks, useRef
is particularly intriguing due to its versatility.ntre estos hooks, useRef
es particularmente interesante debido a su versatilidad.
What is useRef?
The useRef
hook is a function that allows React components to access and interact with DOM nodes or store any mutable value that doesn’t cause a re-render when updated.
const miRef = useRef(valorInicial);
The object returned by useRef
has a .current
property that is initialized with the passed argument (initialValue
). This object will persist for the entire lifetime of the component.
Common Uses of useRef
Accessing the DOM
One of the most common uses of useRef
is to access a DOM element directly. This is useful when you need to manipulate an element without causing a re-render.
function MyComponent() {
const myInput = useRef(null);
const focusInput = () => {
myInput.current.focus();
};
return (
<>
<input type="text" />
<button>Focus the input</button>
</>
);
}
Storing Values
useRef
is also handy for keeping a value that you don’t want to cause re-renders when it changes, such as the previous state of a component or an interval counter.
function TimerComponent() { const intervalRef = useRef(); useEffect(() => { const id = setInterval(() => { // tu lógica de intervalo aquí }, 1000); intervalRef.current = id; return () => clearInterval(intervalRef.current); }, []); // ... }
Why Not Just Use useState?
You might wonder why not just use useState
to store values. The key difference is that changing the value of .current
in the object returned by useRef
will not trigger a re-render, whereas changing state with useState
will.
Conclusion
useRef
is an essential tool in the React toolkit. Whether you need to interact with the DOM or maintain values between renders without causing unnecessary updates, useRef
is your go-to. With its help, you can write more efficient components and perform tasks that would otherwise be complicated in React’s reactive paradigm.
Leave a Reply
Want to join the discussion?Feel free to contribute!