← React tutorial

React

State with useState

useState gives a component a piece of data that persists across re-renders, and a function to update it.

Example: a counter, and why it actually updates on screen

import { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Add</button>
    </div>
  );
}

useState(0) returns two things: the current value (count, starting at 0) and a function to change it (setCount). Calling setCount(count + 1) doesn't just change a variable quietly in the background, it tells React "something changed, please re-run this component and update the screen to match." That re-run-and-redraw step is the entire mechanism behind every interactive React UI, from a simple counter to a full form.

Why you can't just reassign a normal variable instead

let count = 0;
count = count + 1; // this changes the variable, but the screen never updates

A plain variable change is invisible to React, nothing tells it to re-run the component. useState's update function is what actually connects a data change to a visible screen update; that connection is the entire reason it exists instead of an ordinary variable.

Example
import { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Add</button>
    </div>
  );
}
Output
Renders "Count: 0" with an Add button; each click increments the displayed count by 1.
Ready to go further?

These free tutorials are a preview, our Frontend Development cohort covers it in depth, with a real project and a cohort alongside you. Closes Nov 30

Enroll in Frontend Development

Cookie preferences

Choose what you're comfortable with. You can change this any time from the footer.

Don't miss out

Ready to build something real?

Create a free account to enroll in a track, and get notified the moment a cohort opens.

Create free account