Pular para o conteúdo
This is an unmaintained snapshot of the Astro v4 docs. View the latest docs.

Compartilhe estado entre componentes Astro

Enquanto constrói um website Astro, você pode precisar compartilhar estado entre componentes. Astro recomenda o uso de Nano Stores para armazenamento compartilhado no cliente.

  1. Instale Nano Stores:
Janela do terminal
npm install nanostores
  1. Crie uma store. Nesse exemplo, a store irá rastrear se uma caixa de diálogo está aberta ou não:
src/store.js
import { atom } from 'nanostores';
export const estaAberto = atom(false);
  1. Importe e use a store em uma tag <script> nos componentes que irão compartilhar estado.

Os componentes Botao e Dialogo a seguir usam o estado compartilhado estaAberto para controlar se uma <div> em particular está oculta ou visível:

src/components/Botao.astro
<button id="abrirDialogo">Abrir</button>
<script>
import { estaAberto } from '../store.js';
// Definir a store para true quando o botão for clicado
function abrirDialogo() {
estaAberto.set(true);
}
// Adicionar um listener de evento ao botão
document.getElementById('abrirDialogo').addEventListener('click', abrirDialogo);
</script>
src/components/Dialogo.astro
<div id="dialogo" style="display: hidden">Olá mundo!</div>
<script>
import { estaAberto } from '../store.js';
// Ouvir mudanças na store, e mostrar/ocultar a caixa de diálogo de acordo
estaAberto.subscribe(open => {
if (open) {
document.getElementById('dialogo').style.display = 'block';
} else {
document.getElementById('dialogo').style.display = 'none';
}
})
</script>
Contribua

O que passa em sua cabeça?

Comunidade