Compartir estado entre componentes de Astro
¿Usas componentes de framework? Consulta cómo compartir estado entre Islands!
Al construir un sitio web con Astro, puede que necesites compartir estado entre componentes. Astro recomienda el uso de Nano Stores para almacenamiento compartido en el cliente.
-
Instala Nano Stores:
Ventana de la terminal npm install nanostoresVentana de la terminal pnpm add nanostoresVentana de la terminal yarn add nanostores -
Crea un store. En este ejemplo, el store rastrea 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 en una etiqueta
<script>en los componentes que compartirán estado.Los siguientes componentes
ButtonyDialogusan cada uno el estado compartidoisOpenpara controlar si un<div>particular está oculto o visible: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>