How to Set Focus on an Input Element in React using Hooks
In this tutorial, I will show you how to programmatically set the focus to an input element using React.js and hooks. We will use two hooks, useRef and useEffect.
Set up the Project
All you need is a functional component.
I have created a React app from scratch using create-react-app.
Then replace everything inside the App component with this:
import React from 'react';
function App() {
return (
<form>
<input type="text" placeholder="Enter e-mail" />
<input type="password" placeholder="Enter password" />
<input type="submit" />
</form>
);
}
export default App;Here we have created a simple login form.
Start the application by typing npm start in your command line and you should see this beautiful web page:

What is our Goal?
Our goal is to have the focus on the e-mail input when we refresh our browser. This way, the user can start writing their login credentials without clicking on the e-mail input.
Set a reference to the e-mail Input
The first thing we will do is to add a reference to our input element.
- Add
useRefin our import statement. - Call the
useReffunction and assign the result to ainputRefvariable. - Add a
refattribute to the e-mail input and assign theinputRefvariable to it.
The component should look like this:
import React, { useRef } from 'react';
function App() {
const inputRef = useRef();
return (
<form>
<input type="text" placeholder="Enter e-mail" ref={inputRef} />
<input type="password" placeholder="Enter password" />
<input type="submit" />
</form>
);
}
export default App;Set Focus to the Input Element With useEffect
Now that we have added a reference to our input element, we can use that reference to set focus.
However, we can’t just set focus to the element directly in out App function. We have to wait until the rendering has completed.
We can do that with the useEffect hook. With useEffect, the code inside will run after the component has rendered. We can focus the input element by executing the focus function on the current object.
The finished result will look like this:
import React, { useRef, useEffect } from 'react';
function App() {
const inputRef = useRef();
useEffect(() => {
inputRef.current.focus();
})
return (
<form>
<input type="text" placeholder="Enter e-mail" ref={inputRef} />
<input type="password" placeholder="Enter password" />
<input type="submit" />
</form>
);
}
export default App;
When we refresh our page, we can see that the e-mail input is focused and the user can start typing immediately.

