DEV Community

vidhya murali
vidhya murali

Posted on

React useState Hook

useState Hook in React

The React useState Hook allows us to track state in a function component.

State generally refers to data or properties that need to be tracking in an application.

Import useState

To use the useState Hook, we first need to import it into our component.

Notice that we are destructuring useState from react as it is a named export.

Initialize useState

We initialize our state by calling useState in our function component.

useState accepts an initial state and returns two values:

The current state.
A function that updates the state.

  • Notice that again, we are destructuring the returned values from useState.
  • The first value, color, is our current state.
  • The second value, setColor, is the function that is used to update our state.

These names are variables that can be named anything you would like.

Update State

We should never directly update state. Ex: color = "blue" is not allowed.

import { useState } from 'react';
import { createRoot } from 'react-dom/client';

function FavoriteColor() {
  const [color, setColor] = useState("red");

  return (
    <>
      <h1>My favorite color is {color}!</h1>
      <button
        type="button"
        onClick={() => setColor("blue")}
      >Blue</button>
    </>
  )
}

createRoot(document.getElementById('root')).render(
  <FavoriteColor />
);
Enter fullscreen mode Exit fullscreen mode

What Can State Hold?

The useState Hook can be used to keep track of strings, numbers, booleans, arrays, objects, and any combination of these!

We could create multiple state Hooks to track individual values.

Example

  const [brand, setBrand] = useState("Ford");
  const [model, setModel] = useState("Mustang");
  const [year, setYear] = useState("1964");
  const [color, setColor] = useState("red");
Enter fullscreen mode Exit fullscreen mode

Create a single Hook that holds an object:


function MyCar() {
  const [car, setCar] = useState({
    brand: "Ford",
    model: "Mustang",
    year: "1964",
    color: "red"
  });

  return (
    <>
      <h1>My {car.brand}</h1>
      <p>
        It is a {car.color} {car.model} from {car.year}.
      </p>
    </>
  )
}

createRoot(document.getElementById('root')).render(
  <MyCar />
);
Enter fullscreen mode Exit fullscreen mode

Since we are now tracking a single object: car, we need to reference that object when rendering the component. (Ex: car.brand)

Updating Objects and Arrays in State

When state is updated, the entire state gets overwritten.

What if we only want to update the color of our car?

If we only called setCar({color: "blue"}), this would remove the brand, model, and year from our state.

We can use the JavaScript spread operator to help us

Because we need the current value of state, we pass a function into our setCar function. This function receives the previous value.

We then return an object, spreading the previousState and overwriting only the color.

Reference : https://www.w3schools.com/react/react_usestate.asp

Minitask using useState :https://react-mini-project-using-hooks.vercel.app/

Top comments (2)

Collapse
 
dev_saravanan_journey profile image
Saravanan Lakshmanan

The attached useState hook example project was nice.

Collapse
 
vigneshwaran_v profile image
Vigneshwaran V

well explained with right example.