Estados e Hooks
Os estados em React são uma forma de armazenar e gerenciar dados que podem mudar ao longo do tempo em um componente. Eles permitem que você crie componentes dinâmicos que reagem a interações do usuário, atualizações de dados ou outras mudanças.
Um estado é definido dentro de um componente e pode ser inicializado usando o hook useState
. Quando o estado é atualizado, o React re-renderiza o componente, refletindo as mudanças na interface do usuário.
useState
O useState é um hook que permite adicionar uma variável de estado a um componente. De uma maneira mais simples, permite que você crie uma variável que pode ser alterada dinamicamente mesmo após o componente ser renderizado.
Vamos a um exemplo:
import { useState } from 'react';
const App() => {
const [age, setAge] = useState(initialState);
// initialState é o valor que a variável age será inicializada
// Poderíamos definir esse initialState como 19, por exemplo, nesse caso,
// age seria inicializada com o valor 19
return(
<>
<p> Your age is {age} </p>
<button onClick = { () => {setAge(nextState)} }> Click here! </button>
</>
);
}
Neste exemplo, criamos uma variável age, que contém uma função correspondente chamada setAge. Como o próprio nome indica, essa função é utilizada para alterar (setar) um novo valor a variável age e re-renderizar o componente que contém age
, no caso, App
.
Existe uma convenção na nomenclatura essas variáveis de estado como [something, setSomething]
.
useEffect
O hook useEffect
recebe dois argumentos em sua chamada:
Uma função que será executada;
Array de Dependências (parâmetro opcional): define em qual momento a função será executada;
Esse momento será sempre após uma renderização, ou seja, o React irá executar a função depois de realizar as atualizações no DOM**.**
Caso o array de dependências seja vazio, a função só será executada uma vez, no carregamento da página.
Exemplo:
useEffect(() => {
// Função a ser executada
}, [dependencies?]);
useContext
O useContext
é um hook que permite que você acesse valores entre componentes sem a necessidade de passar propriedades manualmente em todos os níveis da árvore de componentes.

Nesse exemplo, temos algumas propriedades (props
) definidas no componente main
. Caso queiramos acessá-las em níveis menores, é necessário passarmos por parâmetro em cada chamada dos componentes essas propriedades.

Já nesse exemplo, é criado um Context
que contém os componentes main
, firstChildren
e secondChildren
. As props
que antes eram geradas na main
e passadas uma a uma para os níveis mais baixos na árvore, são "globais” e podem ser acessadas por cada um dos componentes sem a necessidade de passagem por parâmetros.
Para definirmos um contexto, devemos utilizar a função createContext():
// App.tsx
import React, { createContext } from "react";
const ThemeContext = createContext({ theme: "dark", toggleTheme: () => {} });
// Temos um contexto de dois parâmetros: variável theme, função toggleTheme,
// que ainda não possui uma definição
function App() {
const [theme, setTheme] = useState("dark");
// Definição da variável theme
const toggleTheme = () => {
setTheme((prevTheme) => (prevTheme === "light" ? "dark" : "light"));
};
// Definição da função
return (
<ThemeContext.Provider
value={{
theme,
toggleTheme,
}}
>
</ThemeContext.Provider>
// É nesse momento em que vamos colocar os parâmetros que desejamos
// como "globais" para todos os componentes que necessitem das props
);
}
export default App;
export { ThemeContext };
//Navbar.tsx
import { useContext } from "react";
function Navbar() {
const { theme, toggleTheme } = useContext(ThemeContext);
// Aqui chamamos as propriedades e as quebramos,
// dessa forma, fica mais fácil de utilizá-las
return (
<>
<button
onClick={() => {
toggleTheme();
console.log(theme);
}}
>
Click Me
</button>
</>
);
}
useReducer
O hook useReducer permite gerenciar estados complexos. Ele é uma alternativa ao useState quando o estado é um objeto ou quando a lógica de atualização é mais complexa.
import { useReducer } from 'react';
function reducer(state, action) {
// ...
}
function MyComponent() {
const [state, dispatch] = useReducer(reducer, { age: 42 });
// ...
Last updated
Was this helpful?