Last updated: Apr 6, 2024
Reading timeยท3 min
To get or Change the value of a textarea in React:
useState()
hook to initialize a state variable to an empty string.onChange
prop on the textarea
element.textarea
using the event.target.value
property.textarea
every time the user types.import {useState} from 'react'; const App = () => { const [message, setMessage] = useState(''); const handleMessageChange = event => { // ๐๏ธ access textarea value setMessage(event.target.value); console.log(event.target.value); }; return ( <div> <label htmlFor="message">My Textarea</label> <textarea id="message" name="message" value={message} onChange={handleMessageChange} /> <hr /> <button disabled={!message}>Submit</button> </div> ); }; export default App;
We used the useState hook to store
the value of the textarea
element in the component's state.
const [message, setMessage] = useState('');
We set the initial value of the textarea
element to an empty string, but you
can supply an initial value if that suits your use case.
const [message, setMessage] = useState('initial');
We passed a function to the onChange
prop of the textarea
, so every time the
user types into the field, the handleMessageChange
function gets invoked.
<textarea id="message" name="message" value={message} onChange={handleMessageChange} />
We can access the value of the textarea element on the event object as
event.target.value
.
const handleMessageChange = event => { // ๐๏ธ access textarea value setMessage(event.target.value); console.log(event.target.value); };
target
property on the event is a reference to the textarea element.Each time the user types, we use the setState()
method to change the value of
the state variable to the current value of the textarea
element.
After the value of the textarea has been set, you can access it using the
message
state variable.
The element uses the message
state variable as its value, so the textarea
and the state variable are always in sync.
<textarea id="message" name="message" value={message} onChange={handleMessageChange} />
We used the message
state variable to determine if a button should be disabled
or not.
<button disabled={!message}>Submit</button>
If the textarea
element is empty, the button is disabled, otherwise, it isn't.
ref
in ReactIf you use an uncontrolled textarea field with refs, access its value via
ref.current.value
.
import {useRef} from 'react'; const App = () => { const ref = useRef(null); const handleClick = event => { // ๐๏ธ access textarea value console.log(ref.current.value); }; return ( <div> <label htmlFor="message">My Textarea</label> <textarea ref={ref} id="message" name="message" /> <button onClick={handleClick}>Click</button> </div> ); }; export default App;
Every time you click on the button, the value of the textarea
gets logged to
the console.
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.
current
property on the ref object to get access to the textarea
element on which we set the ref
prop.const handleClick = event => { // ๐๏ธ Access textarea value console.log(ref.current.value); };
When we pass a ref prop to an element, e.g. <textarea 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.You can access any attribute on the textarea
element via ref.current
. If you
log the current
property on the ref
object, it's simply a reference to the
textarea
element.
When using uncontrolled components (with a ref
), the value of the textarea
gets updated automatically.
All we have to do is access the ref.current.value
property to get the current
value of the textarea
element.
If you need to set an initial value for the textarea
element, use the
defaultValue
prop.
import {useRef} from 'react'; const App = () => { const ref = useRef(null); const handleClick = event => { // ๐๏ธ Access textarea value console.log(ref.current.value); }; return ( <div> <label htmlFor="message">My Textarea</label> <textarea ref={ref} id="message" name="message" defaultValue={'initial'} /> <button onClick={handleClick}>Click</button> </div> ); }; export default App;
We set the defaultValue prop on the
textarea
element to initial to specify a default value.
When specifying a default value for a controlled textarea
, you simply pass the
value to the useState
hook.
const [message, setMessage] = useState('');