Descubra como você pode usar o gerenciamento de estado para potencializar seus aplicativos Astro.

Ao construir um aplicativo com a estrutura Astro, você deve estar se perguntando como gerenciar o estado do aplicativo ou compartilhá-lo entre componentes e estruturas. Nano Stores é um dos melhores gestores de estado para Astro, graças ao fato de trabalhar com React, Preact, Svelte, Solid, Lit, Angular e Vanilla JS.

Aprenda como gerenciar o estado dentro de um projeto Astro. Siga etapas simples para criar um aplicativo básico de anotações que usa Nano Stores para gerenciamento de estado e compartilha seu estado entre um componente React e Solid.js.

O que é Astro?

A estrutura Astro permite que você crie aplicativos da web sobre estruturas de UI populares como React, Preact, Vue ou Svelte. A estrutura usa um arquitetura baseada em componentes, portanto, cada página do Astro consiste em vários componentes.

Para acelerar o tempo de carregamento da página, a estrutura minimiza o uso de JavaScript do lado do cliente e pré-renderiza as páginas no servidor.

instagram viewer

O Astro foi projetado para ser a ferramenta ideal para publicação de sites com foco em conteúdo. Pense em blogs, landing pages, sites de notícias e outras páginas que focam no conteúdo em vez da interatividade. Para os componentes marcados como interativos, a estrutura enviará apenas o JavaScript mínimo necessário para ativar essa interatividade.

Instalação e configuração

Se você já tem um projeto Astro instalado e funcionando, pule esta seção.

Mas se você não tiver um projeto Astro, precisará criar um. O único requisito para isso é ter Node.js instalado em sua máquina de desenvolvimento local.

Para criar um projeto Astro totalmente novo, inicie seu prompt de comando, cd no diretório você deseja criar seu projeto e execute o seguinte comando:

npm create astro@latest

Responda "y" para instalar o Astro e forneça um nome para a pasta do seu projeto. Você pode consultar o Astro's tutorial oficial de configuração se você estiver preso no caminho.

Quando terminar de criar o projeto, siga com o seguinte comando (isso adiciona React ao projeto):

npx astro add react

Por fim, instale o Nano Stores for React executando o seguinte comando:

npm i nanostores @nanostores/react

Ainda no seu terminal, faça cd na pasta raiz do projeto e inicie o aplicativo com qualquer um dos seguintes comandos (dependendo de qual deles você está usando):

npm run dev

Ou:

yarn run dev

Ou:

pnpm run dev

Vá para http://localhost: 3000 em seu navegador para ver uma prévia do seu site.

Com seu projeto Astro configurado, o próximo passo é criar um armazenamento para os dados do aplicativo.

Criando o armazenamento de notas

Crie um arquivo chamado noteStore.js arquivo dentro do /src diretório na raiz do seu aplicativo. Dentro deste arquivo, use o átomo() função de nanolojas para criar um armazenamento de notas:

import { atom } from"nanostores"

exportconst notes = atom([])

exportfunctionaddNote(note) {
notes.set([...notes.get(), note])
console.log("Added note: ", note.get())
}

O adicionar nota() A função recebe uma nota como argumento e a armazena dentro do armazenamento de notas. Ele usa o operador spread ao armazenar a nota para evitar a mutação dos dados. O operador spread é um Abreviação de JavaScript para copiar objetos.

Criando a IU do aplicativo de anotações

A UI consistirá simplesmente em uma entrada para coletar a nota e um botão que, ao ser clicado, adiciona a nota à loja.

Dentro de origem/componentes diretório, crie um novo arquivo chamado NotaAddButton.jsx. Em seguida, cole o seguinte código dentro do arquivo:

import {useState} from"react"
import {addNote, notes} from"../noteStore"

exportdefaultfunctionNoteAdder() {
const [userNote, setUserNote] = useState('')

return(
<>

"text" name="note" id="note"
onChange={(event) => setUserNote(event.target.value)} />


    {
    $notes.map((note, index) => {
  • {note}</li>
    })
    }
    </ul>
    </>
    )
    }

Este código adiciona a nota ao estado do componente conforme você digita na entrada. Então, ao clicar no botão, ele salva a nota na loja. Ele também pega as notas da loja e as exibe em uma lista não ordenada. Com esta abordagem, a nota aparecerá na página imediatamente após clicar no botão Salvar botão.

Agora em seu páginas/index.astro arquivo, você precisa importar NotaAddButton e usá-lo dentro do Tag:

import NoteAddButton from"../components/NoteAddButton.jsx"

"Welcome to Astro.">


</main>
</Layout>

// Other code

Se você voltar ao seu navegador, encontrará o elemento de entrada e o botão renderizados na página. Digite algo na entrada e clique no botão Salvar botão. A nota aparecerá imediatamente na página e persistirá na página mesmo depois de atualizar o navegador.

Compartilhando estado entre duas estruturas

Digamos que você queira compartilhar o estado entre React e Solid.js. A primeira coisa que você precisa fazer é adicionar Solid ao seu projeto executando o seguinte comando:

npx astro add solid

Em seguida, adicione Nano Stores para solid.js executando:

npm i nanostores @nanostores/solid

Para criar a UI em solid.js, entre no origem/componentes diretório e crie um novo arquivo chamado Notas.js. Abra o arquivo e crie o componente Notes dentro dele:

import {useStore} from"@nanostores/solid"
import {notes} from"../noteStore"
import {For} from"solid-js"

exportdefaultfunctionNotes() {
const $notes = useStore(notes)

return(
<>

My notes</h1>


    {(note) => <li>{note}li>}
    </For>
    </ul>
    </>
    )
    }

Neste arquivo, você importa as notas da loja, percorre cada uma das notas e exibe-as na página.

Para mostrar o acima Observação componente criado com Solid.js, basta acessar seu páginas/index.astro arquivo, importar NotaAddButton e usá-lo dentro do Tag:

import NodeAddButton from"../components/NoteAddButton.jsx"
import Nodes from"../components/Notes.jsx"

"Welcome to Astro.">



</main>
</Layout>

// Other code

Agora volte ao seu navegador, digite algo na entrada e clique no botão Salvar botão. A nota aparecerá na página e também persistirá entre as renderizações.

Outros novos recursos do Astro

Usando essas técnicas, você pode gerenciar o estado dentro de seu aplicativo Astro e compartilhá-lo entre componentes e estruturas. Mas o Astro tem muitos outros recursos úteis, como coleta de dados, minificação de HTML e renderização paralelizada.