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';// 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>