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
Zapoznajmy się ze strukturą folderów w projekcie
astro.config.mjs
- plik, w którym znajduje się konfiguracja Astrosrc/components
- folder na reużywalne komponentysrc/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...
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
dosrc/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.
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?