Gancho de useState
reação
O React useState
Hook 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 useState
Hook, primeiro precisamos inseri- import
lo em nosso componente.
Exemplo:
Na parte superior do seu componente, import
o useState
Hook.
import { useState } from "react";
Observe que estamos desestruturando useState
, react
pois é uma exportação nomeada.
Para saber mais sobre desestruturação, confira a seção ES6 .
Inicializar useState
Inicializamos nosso estado chamando useState
em 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("")
Obter certificação!
$ 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 useState
Hook 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 setCar
função. Esta função recebe o valor anterior.
Em seguida, retornamos um objeto, espalhando previousState
e sobrescrevendo apenas a cor.