Pular para o conteúdo principal

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.

store/user.ts
import { create } from "@bentoo/state-man";

export const useUser = create({ name: "Ada", email: "" });
components/Header.tsx
import { useUser } from "../store/user";

function Header() {
const { state } = useUser();
return <h2>Olá, {state.name}!</h2>;
}
components/Form.tsx
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

TarefaComo fazer
Criar estadoconst store = create(valorInicial)
Usar em componenteconst { state, setState } = store();
Atualizar valor diretosetState("novoValor")
Atualizar com funçãosetState(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.