useRef
The useRef hook in React is used to access and interact with a DOM element or to keep a mutable reference to a value that doesn't trigger a re-render when it changes. Unlike state variables, changes to a ref do not cause the component to re-render. This makes useRef useful for various scenarios, such as focusing on input fields, measuring DOM elements, or keeping track of previous props/state.
Basic Syntax
The basic syntax of useRef is as follows:
const myRef = useRef(initialValue);
Here, initialValue is the initial value you want to assign to the ref. It's optional and defaults to null.
How it Works
-
Initialize Ref: You initialize a ref using
useRef()and assign it to a variable.const inputRef = useRef(null); -
Attach Ref to Element: You attach the ref to a React element using the
refattribute.<input ref={inputRef} /> -
Access Ref: You can now access the ref in your component logic.
const handleFocus = () => {
inputRef.current.focus();
};
Example
Here's a simple example to demonstrate how useRef can be used to focus an input field:
import React, { useRef } from 'react';
function App() {
const inputRef = useRef(null);
const handleFocus = () => {
inputRef.current.focus();
};
return (
<div>
<input ref={inputRef} type="text" />
<button onClick={handleFocus}>Focus Input</button>
</div>
);
}
export default App;
In this example, clicking the "Focus Input" button will focus the input field. This is done by calling the focus() method on the current property of inputRef.
Use Cases
-
Focus Management: As shown in the example, you can use
useRefto programmatically set the focus on form elements. -
Measurements: You can use it to measure the dimensions of a DOM element.
-
Previous Values: You can use it to keep track of previous values of props or state without causing re-renders.
-
Integration with Third-Party Libraries: Sometimes you may need to integrate with a third-party library that requires direct access to a DOM node.
useRefcan be useful in such scenarios.
Caveats
-
The
currentproperty of the ref object is mutable and can be changed freely. However, changing it does not trigger a re-render. -
If you pass a ref object to a function component, you can't access its instance, as function components don't have instances. You can only use it for DOM access in such cases.
Summary
The useRef hook provides a way to access DOM nodes or keep a mutable reference to a value. It's a versatile hook that comes in handy for various tasks that don't require triggering a re-render.
Below code block in index.js would intentinally triggers useState, useMemo and useReducer and may be some other effects twice
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);