Zum Inhalt springen

Daten abrufen

.astro-Dateien können Daten aus der Ferne abrufen, um dir bei der Erstellung deiner Seiten zu helfen.

Alle Astro-Komponenten haben Zugriff auf die globale Funktion fetch() in ihrem Komponentenskript, um HTTP-Anfragen an APIs unter Verwendung der vollständigen URL (z. B. https://example.com/api) zu stellen. Außerdem kannst du mit new URL("/api", Astro.url) eine URL zu den Seiten und Endpunkten deines Projekts konstruieren, die bei Bedarf auf dem Server gerendert werden.

Dieser Fetch-Aufruf wird zur Erstellungszeit ausgeführt, und die Daten stehen der Komponentenvorlage für die Erzeugung von dynamischem HTML zur Verfügung. Wenn der Modus SSR (EN) aktiviert ist, werden alle Fetch-Aufrufe zur Laufzeit ausgeführt.

💡 Nutze die Vorteile von Top-Level Await in deinem Astro-Komponentenskript.

💡 Übergib die abgerufenen Daten als Eigenschaften an Astro- als auch an Framework-Komponenten.

src/components/User.astro
---
import Contact from '../components/Contact.jsx';
import Location from '../components/Location.astro';
const response = await fetch('https://randomuser.me/api/');
const data = await response.json();
const randomUser = data.results[0];
---
<!-- Daten, die zur Erstellungszeit abgerufen werden, können in HTML gerendert werden -->
<h1>User</h1>
<h2>{randomUser.name.first} {randomUser.name.last}</h2>
<!-- Daten, die zur Erstellungszeit abgerufen werden, können als Eigenschaften an die Komponente übergeben werden -->
<Contact client:load email={randomUser.email} />
<Location city={randomUser.location.city} />

Die fetch()-Funktion ist auch global in jeder Framework-Komponente verfügbar:

src/components/Movies.tsx
import type { FunctionalComponent } from 'preact';
const data = await fetch('https://example.com/movies.json').then((response) =>
response.json()
);
// Komponenten, die zum Zeitpunkt der Erstellung gerendert werden, loggen Daten auch in der CLI.
// Wenn sie mit einer client:*-Direktive gerendert werden, wird dies auch in der Browser-Konsole angezeigt.
console.log(data);
const Movies: FunctionalComponent = () => {
// Ausgabe des Ergebnisses in die Seite
return <div>{JSON.stringify(data)}</div>;
};
export default Movies;

Astro kann auch fetch() nutzen, um GraphQL-Server mit einer beliebigen gültigen GraphQL-Anfrage anzufragen.

src/components/Film.astro
---
const response = await fetch("https://swapi-graphql.netlify.app/.netlify/functions/index",
{
method: 'POST',
headers: {'Content-Type':'application/json'},
body: JSON.stringify({
query: `
query getFilm ($id:ID!) {
film(id: $id) {
title
releaseDate
}
}
`,
variables: {
id: "ZmlsbXM6MQ==",
},
}),
});
const json = await response.json();
const { film } = json.data;
---
<h1>Informationen über Star Wars: Eine neue Hoffnung abrufen</h1>
<h2>Titel: {film.title}</h2>
<p>Jahr: {film.releaseDate}</p>

Astro-Komponenten können Daten aus deinem bevorzugten CMS abrufen und sie dann als Seiteninhalt wiedergeben. Mit dynamischen Routen können die Komponenten sogar Seiten auf der Grundlage deiner CMS-Inhalte erstellen.

In unseren CMS Guides findest du alle Details zur Integration von Astro in Headless CMS wie Storyblok, Contentful und WordPress.

Wirke mit

Worum geht es?

Community