Condividere lo stato tra diversi componenti Astro
Utilizzi componenti di un framework JS? Scopri come condividere lo stato tra Isole!
Quando sviluppi un sito con Astro, potresti aver bisogno di condividere lo stato tra diversi componenti. Astro raccomanda l’utilizzo di Nano Stores per salvare lo stato condiviso lato client.
Soluzione
Sezione intitolata Soluzione- Installa Nano Stores:
npm install nanostores
pnpm install nanostores
yarn add nanostores
- Crea uno store. In questo esempio, lo store tiene traccia dello stato della finestra di dialogo (aperta o meno):
import { atom } from 'nanostores';
export const isOpen = atom(false);
- Importa e utilizza lo store in un tag
<script>
nel componente che condividerà lo stato.
I componenti Button
e Dialog
qui di seguito condividono entrambi lo stato isOpen
per controllare se uno specifico <div>
è nascosto o meno:
<button id="openDialog">Open</button>
<script> import { isOpen } from '../store.js';
// Imposta lo store - isOpen - a true quando si clicca sul pulsante function openDialog() { isOpen.set(true); }
// Aggiunge un event listener al pulsante document.getElementById('openDialog').addEventListener('click', openDialog);</script>
<div id="dialog" style="display: hidden">Hello world!</div>
<script> import { isOpen } from '../store.js';
// Si mette in ascolto di modifiche allo store, e mostra/nasconde la finestra di dialogo di conseguenza isOpen.subscribe(open => { if (open) { document.getElementById('dialog').style.display = 'block'; } else { document.getElementById('dialog').style.display = 'none'; } })</script>