Gancho de useStatereação


O React useStateHook nos permite rastrear o estado em um componente de função.

O estado geralmente se refere a dados ou propriedades que precisam ser rastreados em um aplicativo.


Importar useState

Para usar o useStateHook, primeiro precisamos inseri- importlo em nosso componente.

Exemplo:

Na parte superior do seu componente, importo useStateHook.

import { useState } from "react";

Observe que estamos desestruturando useState, reactpois é uma exportação nomeada.

Para saber mais sobre desestruturação, confira a seção ES6 .


Inicializar useState

Inicializamos nosso estado chamando useStateem nosso componente de função.

useState aceita um estado inicial e retorna dois valores:

  • O estado atual.
  • Uma função que atualiza o estado.

Exemplo:

Inicialize o estado na parte superior do componente da função.

import { useState } from "react";

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

Observe que, novamente, estamos desestruturando os valores retornados de useState.

O primeiro valor, color, é o nosso estado atual.

O segundo valor, setColor, é a função que é usada para atualizar nosso estado.

Esses nomes são variáveis ​​que podem ser nomeadas como você quiser.

Por fim, definimos o estado inicial como uma string vazia: useState("")


w3schools CERTIFIED . 2022

Obter certificação!

Complete os módulos React, faça os exercícios, faça o exame e torne-se certificado w3schools!!

$ 95 INSCRIÇÃO

Estado de leitura

Agora podemos incluir nosso estado em qualquer lugar em nosso componente.

Exemplo:

Use a variável de estado no componente renderizado.

import { useState } from "react";
import ReactDOM from "react-dom";

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

  return <h1>My favorite color is {color}!</h1>
}

ReactDOM.render(<FavoriteColor />, document.getElementById('root'));


Atualizar estado

Para atualizar nosso estado, usamos nossa função de atualização de estado.

Nunca devemos atualizar o estado diretamente. Ex: color = "red"não é permitido.

Exemplo:

Use um botão para atualizar o estado:

import { useState } from "react";
import ReactDOM from "react-dom";

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

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

ReactDOM.render(<FavoriteColor />, document.getElementById('root'));


O que o Estado pode reter

O useStateHook pode ser usado para rastrear strings, números, booleanos, arrays, objetos e qualquer combinação destes!

Poderíamos criar vários Hooks de estado para rastrear valores individuais.

Exemplo:

Crie vários Hooks de estado:

import { useState } from "react";
import ReactDOM from "react-dom";

function Car() {
  const [brand, setBrand] = useState("Ford");
  const [model, setModel] = useState("Mustang");
  const [year, setYear] = useState("1964");
  const [color, setColor] = useState("red");

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

ReactDOM.render(<Car />, document.getElementById('root'));

Ou podemos usar apenas um estado e incluir um objeto!

Exemplo:

Crie um único Hook que contém um objeto:

import { useState } from "react";
import ReactDOM from "react-dom";

function Car() {
  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>
    </>
  )
}

ReactDOM.render(<Car />, document.getElementById('root'));

Como agora estamos rastreando um único objeto, precisamos fazer referência a esse objeto e, em seguida, à propriedade desse objeto ao renderizar o componente. (Ex: car.brand)


Atualizando objetos e arrays no estado

Quando o estado é atualizado, todo o estado é substituído.

E se quisermos apenas atualizar a cor do nosso carro?

Se apenas chamássemos setCar({color: "blue"}), isso removeria a marca, modelo e ano do nosso estado.

Podemos usar o operador spread JavaScript para nos ajudar.

Exemplo:

Use o operador de propagação JavaScript para atualizar apenas a cor do carro:

import { useState } from "react";
import ReactDOM from "react-dom";

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

  const updateColor = () => {
    setCar(previousState => {
      return { ...previousState, color: "blue" }
    });
  }

  return (
    <>
      <h1>My {car.brand}</h1>
      <p>
        It is a {car.color} {car.model} from {car.year}.
      </p>
      <button
        type="button"
        onClick={updateColor}
      >Blue</button>
    </>
  )
}

ReactDOM.render(<Car />, document.getElementById('root'));

Como precisamos do valor atual de state, passamos uma função para nossa setCarfunção. Esta função recebe o valor anterior.

Em seguida, retornamos um objeto, espalhando previousStatee sobrescrevendo apenas a cor.


Teste-se com exercícios

Exercício:

Complete esta instrução para acompanhar uma variável "count" usando o gancho useState.

import { useState } from "react";

function KeepCount() {
  const [, ] = useState(0);
}