Header.astro
const { title } = Astro.props;
<button>
<slot />
</button>
---
import Card from "../components/Card.astro"
---
<p>{description}</p>
<style>
p { background: red }
</style>
<MainLayout>
<Card title="My Card" />
</MainLayout>
{ title && <h2>{title}</h2> }
├── src/
└── layouts/
---
// JavaScript udenfor browseren
---
<img src="/public/images/myImage.webp">
Hvor er vi?
fetch() & map()
Data fetching i Astro
<Card title="Kunstner 1" />
<Card title="Kunstner 2" />
<Card title="Kunstner 3" />
<Card title="Kunstner 4" />
<Card title="Kunstner 5" />
<Card title="Kunstner 6" />
<Card title="Kunstner 7" />
<Card title="Kunstner 8" />
<Card title="Kunstner 9" />
<Card title="Kunstner 10" />
Det, vi gør nu
Data fetching i Astro
{
artists.map((artist) => <Card title={artist.title} />)
}
Det, vi gør om lidt
fetch(something)
.then(response => response.json())
.then(myFunction)
Tema 7
async function getData() {
const response = await fetch("...");
const data = await response.json()
myFunction(data)
}
getData()
Alternativ syntaks
---
const response = await fetch("...");
const data = await response.json();
---
I Astro får vi lov til...
---
const data = await fetch("...").then(response => response.json());
---
... eller som one-liner
---
const data = await fetch("...").then(response => response.json());
console.log(data)
---
Log data
---
const data = await fetch("...").then(response => response.json());
console.log(data)
---
Log sker på "serveren"
---
const data = await fetch("...").then(response => response.json());
console.log(data)
---
Log sker på "serveren"
---
const now = new Date();
const localTime = now.toLocaleTimeString("da-DK");
console.log(localTime)
---
JavaScript på serveren ("build time")
Bliver logget i terminalen
JavaScript i browseren ("client side")
---
const now = new Date();
const localTime = now.toLocaleTimeString("da-DK");
console.log(localTime)
---
<script>
console.log("Client side")
</script>
Bliver logget i browseren
Bliver logget i terminalen
JavaScript i browseren ("client side")
---
const now = new Date();
const localTime = now.toLocaleTimeString("da-DK");
console.log(localTime)
---
<script>
console.log("Client side")
</script>
Tema 7
fetch("https://kea-alt-del.dk/t7/api/products")
.then((res) => res.json())
.then((myData) => {
myData.forEach((product) => {
const clone = template.content.cloneNode(true);
const h3 = clone.querySelector("h3");
h3.textContent = product.productdisplayname;
container.appendChild(clone);
});
});
forEach
Tema 7
forEach
itererer gennem eksisterende elementer og gør noget
forEach() vs map()
forEach
itererer gennem eksisterende elementer og gør noget
map
itererer over et array og returnerer et nyt, transformeret array
Generer nye elementer
map
---
const produkter = ;
---
<ul>
{produkter.map((produkt) => (
<li>{produkt}</li>
))}
</ul>
['Æble', 'Banan', 'Citron']
Astro-magi
---
const produkter = ['Æble', 'Banan', 'Citron'];
---
<ul>
{
}
</ul>
['Æble', 'Banan', 'Citron']
ÆbleBananCitron
Astro-magi
---
const produkter = ['Æble', 'Banan', 'Citron'];
---
<ul>
{
}
</ul>
[<li>Æble</li>, <li>Banan</li>, <li>Citron</li>]
Nyt, transformeret array
Astro-magi
---
const produkter = ['Æble', 'Banan', 'Citron'];
---
<ul>
{
produkter.map((produkt) => (
<li>{produkt}</li>
))
}
</ul>
map() itererer over arrayet og returnerer listeelementer
Astro kan også returnere components
---
const produkter = ['Æble', 'Banan', 'Citron'];
---
<ul>
{
produkter.map((produkt) => (
<Card title={produkt} />
))
}
</ul>
map() itererer over arrayet og returnerer en component
fetch() + map() = 🤩
JSON
---
const artists = await fetch("...").then(response => response.json());
---
<ul>
{
artists.map((artist) => (
<Card title={artist.title}
img={artist.image.url}
featured={artist.featured}
/>
))
}
</ul>
øvelse
Render HTML i browseren på baggrund af et lille datasæt (find øvelsen på Fronter)
Vis eller skjul indhold baseret på bestemte betingelser
---
const artists = await fetch("...").then(response => response.json());
---
<ul>
{
artists.map((artist) => (
<Card title={artist.title}
img={artist.image.url}
featured={artist.featured}
/>
))
}
</ul>
---
const { title, img, featured } = Astro.props;
---
<article>
<h2>...</h2>
<img />
</article>
{
}
&&
visible
<p class="featured">Featured artist</p>
---
const { title, img, featured } = Astro.props;
---
<article>
<h2>...</h2>
<img />
</article>
<p class="featured">Featured artist</p>
{
}
&&
visible
---
const { title, img, featured } = Astro.props;
---
<article>
<h2>...</h2>
<img />
</article>
<p class="featured">Featured artist</p>
{
}
&&
featured
---
const { title, img, featured } = Astro.props;
---
<article>
<h2>...</h2>
<img />
</article>
<p class="featured">Featured artist</p>
{
}
&&
featured
hvis featured er sand
---
const { title, img, featured } = Astro.props;
---
<article>
<h2>...</h2>
<img />
</article>
<p class="featured">Featured artist</p>
{
}
&&
featured
vis HTML
---
const { title, img, featured } = Astro.props;
---
<article>
<h2>...</h2>
<img />
</article>
<p class="featured">Featured artist</p>
{
}
&&
featured
(
)
---
const { title, img, featured } = Astro.props;
---
<article class={featured && "featured-artist"}>
<h2>...</h2>
{featured && <p class="featured">Featured artist</p>}
<img />
</article>
Kom i gang
Mandag
I dag
Projektarbejde og vejledning