Focus an input field in React with the `useRef` and `useEffect` hooks

Share this video with your friends

Social Share Links

Send Tweet
Published 5 years ago
Updated 4 years ago

In this lesson, we make the Search input field focus on page load. To do this, we keep a reference of the input field with the useRef hook, and trigger focus on that field when the component mounts with another React hook, useEffect.

Simon Vrachliotis: [0:00] The search functionality sounds like a key feature of this app, but currently the user has to click on the input field before typing in a search. It would be nice if the input field was focused on loads, so the user can start typing.

[0:13] To do this, we need to get hold of a DOM element, the input field, and keep a reference to it. We'll use another React Hook to do this, useRef. Let's create a variable called inputRef = useRef. We'll add a ref prop to our inputs, which will be set to inputRef.

[0:34] If we console.log(inputRef) here, you can see that it has a current property which is the input itself. We can make this field focus imperatively by calling .focus on it. To release as soon as the search component is loaded, we will use yet another React Hook, useEffect. Import useEffect from "react".

[0:58] We'll call useEffect here, which takes a function, and we'll do inputRef.current.focus() in there. We only want that code to run once, so we'll pass an empty array of dependencies to the useEffect.

[1:11] Now, when we reload the app, the input field is focused, and we can start typing right away. Sweet.