Compartir estado entre componentes Astro
¿Usas componentes de algún framework? Mira cómo compartir estado entre islas (EN).
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";// Establece el store en true cuando se hace clic en el botónfunction openDialog() {isOpen.set(true);}// Agrega un event listener al botóndocument.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";const dialog = document.getElementById("dialog");// Escucha los cambios en el store y muestra/oculta el diálogo en consecuenciaisOpen.subscribe((open) => {if (dialog) {if (open) {dialog.style.display = "block";} else {dialog.style.display = "none";}}});</script>