Abrufen von Daten
.astro
-Dateien können während des Erstellungsvorgangs Remote-Daten abrufen, um die Generierung deiner Seiten zu unterstützen.
fetch()
in Astro
Abschnitt betitelt fetch() in AstroJede Astro-Komponente hat Zugriff auf die globale fetch()
-Funktion in ihrem Komponentenskript, um HTTP-Requests an APIs zu senden. Dieser fetch-Aufruf wird zur Erstellungszeit ausgeführt und die Daten sind in der Komponentenvorlage für eine dynamische HTML-Generierung verfügbar.
💡 Nutze die Vorteile von Top-Level Await in deinem Astro-Komponentenskript.
💡 Übergebe die abgerufenen Daten als Eigenschaften an Astro- als auch an Framework-Komponenten.
---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} />
Beachte, dass alle Daten in Astro-Komponenten zum Render-Zeitpunkt der Komponente abgerufen werden.
Deine veröffentlichte Astro-Website ruft Daten einmalig während des Erstellungsvorgangs ab. Während der Entwicklung wirst du aber bei jeder Komponentenaktualisierung einen Datenabruf sehen. Wenn du einen mehrfachen clientseitigen Datenabruf benötigst, nutze eine Framework-Komponente oder ein clientseitiges Skript in einer Astro-Komponente.
fetch()
in Framework-Komponenten
Abschnitt betitelt fetch() in Framework-KomponentenDie fetch()
-Funktion ist auch global in jeder Framework-Komponente verfügbar:
import type { FunctionalComponent } from 'preact';import { h } 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;
GraphQL-Abfragen
Abschnitt betitelt GraphQL-AbfragenAstro kann auch fetch()
nutzen, um GraphQL-Server mit einer beliebigen gültigen GraphQL-Anfrage anzufragen.
---const response = await fetch("https://graphql-weather-api.herokuapp.com", { method: 'POST', headers: {'Content-Type':'application/json'}, body: JSON.stringify({ query: ` query getWeather($name:String!) { getCityByName(name: $name){ name country weather { summary { description } } } } `, variables: { name: "Toronto", }, }), });
const json = await response.json();const weather = json.data;---<h1>Abruf des Wetters zur Erstellungszeit</h1><h2>{weather.getCityByName.name}, {weather.getCityByName.country}</h2><p>Wetter: {weather.getCityByName.weather.summary.description}</p>
Abfragen von einem Headless-CMS
Abschnitt betitelt Abfragen von einem Headless-CMSLade Remote-Inhalte von deinem bevorzugten CMS, z.B. Storyblok oder WordPress!
Astro-Komponenten könnten Daten von deinem CMS abrufen und in deinen Seiteninhalt rendern. Mit dynamischen Routen können Komponenten sogar Seiten auf der Basis deiner CMS-Inhalte generieren.
Nachfolgend zeigen wir dir einige Beispiele, wie die Datenabfrage in Astro aussieht. Links zu den vollständigen Tutorials findest du jeweils darunter.
Beispiel: Storyblok-API
Abschnitt betitelt Beispiel: Storyblok-API---// Abrufen einer Liste deiner Storyblok-Seitenlinks mit @storyblok/jsimport BaseLayout from '../layouts/BaseLayout.astro';import { storyblokInit, apiPlugin } from "@storyblok/js";
const { storyblokApi } = storyblokInit({ accessToken: "MEIN_STORYBLOK_ACCESS_TOKEN", use: [apiPlugin],});
const { data } = await storyblokApi.get('cdn/links');const links = Object.values(data.links);---<BaseLayout> <h1>Astro + Storyblok</h1> <ul> {links.map(link => ( <li><a href={link.slug}>{link.name}</a></li> ))} </ul></BaseLayout>
Sieh dir das vollständige Tutorial Hinzufügen eines Headless-CMS zu Astro in 5 Minuten an, um Storyblok zu Astro hinzuzufügen!
Beispiel: WordPress + GraphQL
Abschnitt betitelt Beispiel: WordPress + GraphQL---// Abrufen des Seiteninhalts deiner "Über mich"-Seite von der WordPress API
import BaseLayout from '../../layouts/BaseLayout.astro';
const slug = 'ueber-mich';const response = await fetch(import.meta.env.WORDPRESS_API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: ` { page(id:"${slug}", idType:URI) { title content } } `});const data = await response.json();---<BaseLayout> <h1>{data.title}</h1> <article set:html={data.content} /></BaseLayout>
Sieh dir das vollständige Tutorial Erstellen einer Astro-Website mit WordPress als Headless-CMS an, um WordPress zu deinem Astro-Projekt hinzuzufügen!
Learn