Przejdź do głównej zawartości

Spróbujmy z Astro!

notatka

Spróbujemy teraz zaimplemntować komponent Link w projekcie opartym o Astro

Nowy projekt Astro​

Generujemy strukturę projektu​

pnpm create astro@latest

Wybory podjęte podczas generowania

Astro CLI

Zapoznajmy się ze strukturą folderów w projekcie​

  • astro.config.mjs - plik, w którym znajduje się konfiguracja Astro
  • src/components - folder na reużywalne komponenty
  • src/layouts- folder na layouty stron, tu znajdują się pliki zawierające tagi <head></head> i <body></body>
  • src/pages - folder na strony (osobne ściezki w routingu)

Instalujemy i importujemy Bootstrap'a jak poprzednio​

pnpm i bootstrap@5.3.3
  • Dodajemy import do pliku src/layouts/Layout.astro
---
import 'bootstrap/dist/css/bootstrap.css'

O nie, i wszystko od początku...​

Strassburger

wskazówka

Dzięki integracjom Astro możemy wykorzystać komponenty Reactowe w naszym kodzie!

Instalcja integracji z React​

pnpm astro add react
wskazówka

Astro informuje nas o wszystkich zmianach, których dokonuje w projekcie w z wiązku z integracją.

Przeniesienie kodu z projektu React'owego​

  • Kopiujemy src/components/Link.tsx do takiego samego katalogu w projekcie Astro
  • Kopiujemy strukturę JSX z src/App.tsx do src/pages/index.Astro oraz dodajemy kilka smaczków 😉
<Layout title="Home page">
<div class="row">
<div class="col min-vh-100 text-center pt-5">
<div class="col-lg-6 mx-auto">
<img src="/favicon.svg" height="256"/>
<p class="lead mb-4">
Talk4Devs is the coolest IT Event in the world.
But you probably know that already... 😉
</p>
</div>
<Link url="https://talk4devs.j-labs.pl/" text="Talk4Devs" primary />
<Link url="https://www.j-labs.pl/" text="J-Labs" />
</div>
</div>
</Layout>
  • Dodajemy strukturę HTML do pliku /src/layouts/Layout.astro dla lepszej oprawy wizualnej
<main transition:animate="slide" class="container pt-5 min-vh-100">
<slot />
</main>
  • Odpalamy build, aby sprawdzić jakie są rezultaty co do rozmiaru naszej strony
pnpm build && pnpm preview
  • Astro nie załączyło żadnego JavaScript'u mimo, że użyliśmy komponentów z React'a. Rozmiar strony to 33.4kB przy tej samej funkcjonalności. Astro Build Size

Jak to się stało?​

informacja

Przy komponentach niezawierających żadnej logiki, astro kompiluje je do czystego kodu HTML.

warning

Skoro nie ma Javascript'u to nie ma też VirtualDOM. Jak myślicie, czy to dobrze, czy nie?