Compartilhe estado entre componentes Astro
Usando componentes de um framework? Veja como compartilhar estado entre Ilhas!
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.
Receita
Seção intitulada Receita- Instale Nano Stores:
npm install nanostores
pnpm install nanostores
yarn add nanostores
- Crie uma store. Nesse exemplo, a store irá rastrear se uma caixa de diálogo está aberta ou não:
import { atom } from 'nanostores';
export const estaAberto = atom(false);
- 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:
<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>
<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>