Last updated: Apr 6, 2024
Reading timeยท3 min

To set an input field's value using a ref in React:
ref prop on the input element.ref.current.value = 'New value'.import {useRef} from 'react'; const App = () => { const inputRef = useRef(null); function handleClick() { // ๐๏ธ Update input value inputRef.current.value = 'New value'; // ๐๏ธ Access input value console.log(inputRef.current.value); } return ( <div> <input ref={inputRef} type="text" id="message" name="message" /> <button onClick={handleClick}>Log message</button> </div> ); }; export default App;

The example uses an uncontrolled input. Notice that the input field does not
have an onChange prop or value set.
When using uncontrolled input fields, we access the input using a ref.
The useRef() hook can be passed an initial value as an argument. The hook
returns a mutable ref object whose .current property is initialized to the
passed argument.
const inputRef = useRef(null);
current property on the ref object to get access to the input element on which we set the ref prop.function handleClick() { // ๐๏ธ Update input value inputRef.current.value = 'New value'; // ๐๏ธ Access input value console.log(inputRef.current.value); }
When we pass a ref prop to an element, e.g. <input ref={myRef} />, React sets
the .current property of the ref object to the corresponding DOM node.
useRef hook creates a plain JavaScript object but gives you the same ref object on every render. In other words, it's pretty much a memoized object value with a .current property.It should be noted that when you change the value of the current property of
the ref, no re-renders are caused.
Every time the user clicks on the button in the example, the value of the uncontrolled input gets updated.
If you need to
clear the value of the input field, set its
value to an empty string, e.g. inputRef.current.value = ''.
You shouldn't set the value prop on an uncontrolled input (an input field that
doesn't have an onChange handler) because that would make the input field
immutable and you wouldn't be able to type in it.
If you try to access the ref's current property before its corresponding DOM
element is rendered,
you'd get a null or an undefined value
back.
If you use TypeScript, you might get the error useRef "Object is possibly null"
You can learn more about the related topics by checking out the following tutorials: