Compartir estado entre componentes Astro
Al construir un sitio con Astro, puede que necesites compartir estado entre componentes. Astro recomienda usar Nano Stores para almacenamiento compartido del lado cliente.
-
Instala Nano Stores:
Ventana de terminal npm install nanostoresVentana de terminal pnpm add nanostoresVentana de terminal yarn add nanostores -
Crea un store. En este ejemplo, el store registra si un diálogo está abierto o no:
src/store.js import { atom } from 'nanostores';export const isOpen = atom(false); -
Importa y usa el store dentro de una etiqueta
<script>en los componentes que compartirán estado.Los siguientes componentes
ButtonyDialogusan el estado compartidoisOpenpara controlar si un<div>concreto se oculta o se muestra:src/components/Button.astro <button id="openDialog">Open</button><script>import { isOpen } from '../store.js';// Set the store to true when the button is clickedfunction openDialog() {isOpen.set(true);}// Add an event listener to the buttondocument.getElementById('openDialog').addEventListener('click', openDialog);</script>src/components/Dialog.astro <div id="dialog" style="display: none">Hello world!</div><script>import { isOpen } from '../store.js';// Listen to changes in the store, and show/hide the dialog accordinglyisOpen.subscribe(open => {if (open) {document.getElementById('dialog').style.display = 'block';} else {document.getElementById('dialog').style.display = 'none';}})</script>