- Published
Gerenciamento de Estado em React: Conceitos e Exemplos Práticos
- Authors
- Name
- Rafael Camillo
- @rafaelcamillo_
Gerenciar o estado em aplicações React é um aspecto fundamental para o desenvolvimento de interfaces dinâmicas e interativas. Este artigo aborda com mais detalhes e exemplos práticos o gerenciamento de estado em React, destacando as melhores práticas e estratégias eficazes.
Estado Local com Hooks
O React Hooks revolucionou o gerenciamento de estado em componentes funcionais. Vamos explorar dois Hooks fundamentais: useState
e useEffect
.
useState: Fundamentos e Exemplo
useState
é o Hook básico para criar estado em um componente funcional. Por exemplo, em um componente de contador:
import React, { useState } from 'react'
function Counter() {
const [count, setCount] = useState(0)
return (
<div>
<p>Você clicou {count} vezes</p>
<button onClick={() => setCount(count + 1)}>Clique aqui</button>
</div>
)
}
Neste exemplo, useState
é usado para rastrear o número de cliques. count é o valor atual do estado, e setCount é a função que atualiza o estado.
useEffect: Gerenciando Efeitos Colaterais
useEffect
é usado para realizar operações que não são possíveis no render, como chamadas de API ou subscrições. Por exemplo, para buscar dados de uma API:
import React, { useState, useEffect } from 'react'
function UserData() {
const [user, setUser] = useState(null)
useEffect(() => {
async function fetchUserData() {
const response = await fetch('https://api.user.com')
const userData = await response.json()
setUser(userData)
}
fetchUserData()
}, []) // O array vazio indica que o efeito será executado apenas uma vez
return <div>{user ? <p>Olá, {user.name}</p> : <p>Carregando...</p>}</div>
}
Gerenciamento de Estado Global
Em aplicações maiores, você pode precisar compartilhar estado entre vários componentes.
Context API: Compartilhando Estado
A Context API permite passar dados através da árvore de componentes sem ter que passar props manualmente em cada nível. Por exemplo, um tema compartilhado:
import React, { useContext, createContext, useState } from 'react'
const ThemeContext = createContext()
function ThemeProvider({ children }) {
const [theme, setTheme] = useState('claro')
return <ThemeContext.Provider value={{ theme, setTheme }}>{children}</ThemeContext.Provider>
}
function Button() {
const { theme, setTheme } = useContext(ThemeContext)
return (
<button onClick={() => setTheme(theme === 'claro' ? 'escuro' : 'claro')}>
Alterar para tema {theme === 'claro' ? 'escuro' : 'claro'}
</button>
)
}
Leia em mais detalhes como a Context API funcionam aqui: Gerenciando um Carrinho de Compras com a Context API.
Redux: Gerenciamento de Estado Avançado
Redux oferece uma solução robusta para gerenciar estados complexos e grandes fluxos de dados. Por exemplo, em um sistema de carrinho de compras:
// actions.js
export const addToCart = (item) => {
return {
type: 'ADD_TO_CART',
payload: item,
}
}
// reducer.js
const cartReducer = (state = [], action) => {
switch (action.type) {
case 'ADD_TO_CART':
return [...state, action.payload]
default:
return state
}
}
// CartComponent.jsx
import { useDispatch, useSelector } from 'react-redux'
import { addToCart } from './actions'
function CartComponent() {
const dispatch = useDispatch()
const cart = useSelector((state) => state.cart)
const handleAddToCart = (item) => {
dispatch(addToCart(item))
}
// JSX que mostra o carrinho e permite adicionar itens
}
Leia em mais detalhes como o Redux funcionam aqui: Gerenciamento de Sessão de Usuário usando Redux.
Conclusão
Gerenciar o estado em React requer uma compreensão clara das ferramentas e técnicas disponíveis. Seja utilizando o useState e useEffect para estados locais ou adotando Context API e Redux para estados complexos e globais, cada abordagem tem suas vantagens e casos de uso. A chave é entender as necessidades específicas da sua aplicação e aplicar a solução mais adequada, mantendo o código organizado, testável e fácil de manter.
Não esqueça de me seguir no Twitter ou LinkedIn pra saber de todos os novos artigos ou insights.