Guia de uso
Aqui você vai aprender como utilizar a lib em diferentes contextos da sua aplicação. A API é pensada para ser minimalista, porém poderosa.
Exemplo básico
import { create } from "@bentoo/state-man";
const useCounter = create(0);
function Counter() {
const { state, setState } = useCounter();
return (
<button onClick={() => setState(state + 1)}>
Contador: {state}
</button>
);
}
Perceba que não há contexto, provider, reducer ou middleware. Apenas um hook.
Estado compartilhado
Crie a store e utilize onde quiser.
import { create } from "@bentoo/state-man";
export const useUser = create({ name: "Ada", email: "" });
import { useUser } from "../store/user";
function Header() {
const { state } = useUser();
return <h2>Olá, {state.name}!</h2>;
}
import { useUser } from "../store/user";
function Form() {
const { setState } = useUser();
return (
<input
placeholder="Nome"
onChange={(e) => setState({ name: e.target.value })}
/>
);
}
Os dois componentes acima compartilham o mesmo estado sem precisar de Context API.
Atualizações seguras com setState(prev => ...)
Em situações assíncronas ou onde múltiplas atualizações podem ocorrer, use a função atualizadora para garantir que está usando o estado mais recente:
const { setState } = useCounter();
// ✅ forma segura
setState(prev => prev + 1);
Isso evita efeitos colaterais causados por closures ou múltiplos eventos encadeados.
Atualizando parcialmente (shallow merge)
Quando estiver lidando com objetos, você pode atualizar somente parte do estado sem sobrescrever o restante:
setState(prev => ({ ...prev, email: "ada@lovelace.dev" }));
Boas práticas
- Prefira
setState(prev => ...)
quando o valor depende do anterior. - Evite stores enormes. Prefira dividir por domínio (ex:
useUser
,useCart
). - Pode usar com TypeScript de forma tipada (inferência total).
TL;DR
Tarefa | Como fazer |
---|---|
Criar estado | const store = create(valorInicial) |
Usar em componente | const { state, setState } = store(); |
Atualizar valor direto | setState("novoValor") |
Atualizar com função | setState(prev => novaVersao) |
🧠 Dica: Se você já sabe usar
useState
, já sabe 90% do necessário para usar@bentoo/state-man
— só que agora, você pode compartilhar esse estado com qualquer lugar da app.