0Pricing
React Academy · Aula

Lendo e escrevendo átomos com useAtom

Use useAtom, useAtomValue e useSetAtom para ler e atualizar átomos em toda a árvore de componentes.

Lendo e escrevendo átomos com useAtom é uma aula grátis de React Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

useAtom: o gancho principal

useAtom(someAtom) retorna [value, setter], reproduzindo a API de useState. O valor é o estado atual do átomo; a função de atualização o modifica. Utilize-o quando um componente tanto lê quanto escreve no átomo.

A função de atualização aceita um novo valor ou uma função de atualização: setCount(c => c + 1).

useAtomValue: acesso somente para leitura

useAtomValue(someAtom) retorna somente o valor atual, sem uma função de atualização. Utilize-o em componentes que apenas exibem dados, leem o estado, mas nunca o modificam.

Como o componente não mantém uma referência à função de atualização, a intenção fica claramente documentada no código: este componente é um leitor puro.

useSetAtom: acesso somente para escrita

useSetAtom(someAtom) retorna somente a função de atualização. O mais importante é que ele não inscreve o componente no valor do átomo. O componente nunca é renderizado novamente quando o átomo muda.

Utilize-o em componentes que executam somente ações, como botões que despacham mudanças de estado, mas não exibem nenhuma interface derivada.

Por que useSetAtom é importante para o desempenho

Um componente que chama useSetAtom(countAtom) para incrementar um contador nunca será renderizado novamente quando countAtom mudar, pois não tem uma assinatura do valor. Somente o componente que exibe a contagem é renderizado novamente.

Essa é uma otimização simples, mas poderosa: desacople quem escreve de quem lê para evitar novas renderizações em cascata.

atomWithStorage para persistência

Importe atomWithStorage de jotai/utils. Utilize-o exatamente como atom(), mas passe uma chave de armazenamento como primeiro argumento: atomWithStorage('theme', 'light'). O átomo é sincronizado automaticamente com localStorage.

Ao recarregar a página, o átomo é hidratado a partir de localStorage. Todos os componentes que leem o átomo obtêm imediatamente o valor persistido.

Redefinindo atomWithStorage

O símbolo RESET de jotai/utils pode ser passado à função de atualização de um átomo atomWithStorage: setter(RESET). Isso limpa a entrada em localStorage e redefine o átomo para seu valor inicial.

Isso é útil em fluxos de encerramento de sessão ou em botões de "redefinir para os padrões" nas páginas de configurações.

Famílias de átomos com atomFamily

atomFamily de jotai/utils cria uma fábrica que retorna um átomo parametrizado. Por exemplo, atomFamily(id => atom(null)) cria um átomo separado para cada id exclusivo informado.

Isso é ideal para estados por item, como selectedAtom(itemId) ou expandedAtom(rowId), sem precisar gerenciar um único átomo com um mapa grande.

Limpeza de famílias de átomos

As famílias de átomos podem crescer sem limite se os IDs se acumularem. Utilize atomFamily.setShouldRemove((createdAt, param) => ...) para definir um predicado de limpeza que o Jotai chama ao decidir remover membros antigos da família.

Em listas nas quais itens são adicionados e removidos, sempre limpe as entradas da família de átomos quando os itens forem excluídos para evitar vazamentos de memória.

DevTools do Jotai

O pacote jotai-devtools fornece um painel visual que lista todos os átomos ativos e seus valores atuais. Instale-o, envolva sua aplicação com DevTools e inspecione o estado dos átomos em tempo real.

Cada atualização de átomo é registrada com o valor anterior e o próximo, tornando simples depurar interações complexas entre átomos.

Exemplo de novas renderizações seletivas

Em uma lista grande, um componente ListContainer pode usar useSetAtom(selectedIdAtom) para atualizar a seleção sem assinar selectedIdAtom. Somente os componentes ListItem individuais que chamam useAtomValue(selectedIdAtom) são renderizados novamente quando a seleção muda.

Esse padrão escala bem: adicionar milhares de itens à lista não torna as atualizações de seleção mais lentas.

Combinando os três ganchos

Escolha o gancho que corresponde à necessidade do seu componente: useAtomValue para exibição pura, useSetAtom para ações puras e useAtom quando precisar de ambos. Esse design intencional da API torna clara, de imediato, a responsabilidade do componente.

Um componente de campo de formulário normalmente usa useAtom; um botão de envio usa useSetAtom; um rótulo que exibe uma contagem usa useAtomValue.

useSetAtom vs useAtom

Qual é a principal vantagem de usar useSetAtom em vez de useAtom?

Recapitulação da lição

useAtom fornece o valor e a função de atualização; useAtomValue fornece somente o valor (assinaturas de leitura); useSetAtom fornece somente a função de atualização (sem nova renderização quando o valor muda). atomWithStorage persiste os dados em localStorage com suporte a RESET, e atomFamily cria átomos por parâmetro para listas dinâmicas.

Escolher o gancho correto minimiza novas renderizações desnecessárias e torna explícita a intenção do componente.

Perguntas Frequentes

A aula “Lendo e escrevendo átomos com useAtom” é grátis?

Sim — o texto completo de “Lendo e escrevendo átomos com useAtom” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “Lendo e escrevendo átomos com useAtom”?

Use useAtom, useAtomValue e useSetAtom para ler e atualizar átomos em toda a árvore de componentes. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Lendo e escrevendo átomos com useAtom”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Átomos: a unidade de estado no Jotai
  2. Lendo e escrevendo átomos com useAtom
  3. Átomos derivados e assíncronos
  4. Jotai versus Zustand versus Context: quando usar cada um
← Voltar para React Academy