💻 Exemplos: Capítulo 14: Gerenciamento de Estado Global Leve com Zustand
Especialização Frontend com React & TypeScript • Demonstrações Práticas Executáveis
🎯 Contexto e Objetivo Prático
Store atômica e desacoplada com Zustand, ações fortemente tipadas e persistência automática no localStorage.
💻 Código Fonte React 19 (TSX)
// authStore.ts
import { create } from "zustand";
import { persist, createJSONStorage } from "zustand/middleware";
export interface UserSession {
userId: string;
name: string;
token: string;
}
export interface AuthState {
user: UserSession | null;
isAuthenticated: boolean;
login: (user: UserSession) => void;
logout: () => void;
}
export const useAuthStore = create<AuthState>()(
persist(
set => ({
user: null,
isAuthenticated: false,
login: user => set({ user, isAuthenticated: true }),
logout: () => set({ user: null, isAuthenticated: false })
}),
{
name: "auth-session-storage",
storage: createJSONStorage(() => localStorage)
}
)
);
// Componente Consumidor com Seletor Atômico (Zero re-render extra)
export function UserProfileHeader() {
const user = useAuthStore(state => state.user);
const logout = useAuthStore(state => state.logout);
if (!user) return <span className="text-sm text-slate-400">Não autenticado</span>;
return (
<div className="flex items-center gap-3">
<span className="text-sm font-semibold">{user.name}</span>
<button onClick={logout} className="text-xs text-red-600 font-bold">
Sair
</button>
</div>
);
}
🖥️ Saída de Renderização Visual e Comportamento
[Header com Zustand Store]
Usuário Autenticado: Ricardo Lima
[Sair] -> Dispara logout(), limpa o estado atômico e sincroniza localStorage.