React useState Hook
function Counter() {
const [count, setCount] = React.useState(0);
const increment = () => setCount(count + 1);
return <button onClick={increment}>{count}</button>
}
React.useState
is a function that accepts a single argument. That argument is the initial state for the instance of the component. In our case, the state starts as 0
.
React.useState
returns a pair of values. It does this by returning an array with two elements (and we use destructuring syntax to assign each of those values to distinct variables).
const array = React.useState(0);
const count = array[0]; // state value
const setCount = array[1]; // set state function
// OR use destructuring
const [count, setCount] = React.useState(0);
The first of the pair is the state value and the second is a function we can call to update the state. We can name these variables whatever we want. Common convention is to choose a name for the state variable, then prefix set
in front of that for the updater function.
State can be defined as: data that changes over time. So, how does this work over time? When the button is clicked, our increment
function will be called at which time we update the count
by calling setCount
.
Calling setCount
tells React to re-render our component. When it does this, the entire Counter
function is re-run, so when React.useState
is called this time, the value we get back is the value that we called setCount
with. And it continues like that until Counter
is unmounted (removed from the application), or the user closes the application.
Here's a basic form example where state is updated when a user types in the input:
See the Pen React useState by Gareth Redfern (@garethredfern) on CodePen.
These notes are taken from the excellent Epic React course, by Kent C. Dodds.