Saltar al contenido

Obtención de datos

Los archivos .astro pueden obtener datos remotos para ayudarte a generar tus páginas.

Todos los componentes de Astro tienen acceso a la función global fetch() en su script de componente para realizar solicitudes HTTP a APIs utilizando la URL completa (por ejemplo, https://example.com/api). Además, puedes construir una URL para las páginas y endpoints de tu proyecto que se renderizan bajo demanda en el servidor utilizando new URL("/api", Astro.url).

Esta llamada fetch se ejecutará en tiempo de compilación y los datos estarán disponibles para la plantilla del componente para generar HTML dinámico. Si el modo SSR está habilitado, cualquier llamada fetch se ejecutará en tiempo de ejecución.

💡 Aprovecha el await de nivel superior (top-level await) dentro del script de tu componente de Astro.

💡 Pasa los datos obtenidos tanto a los componentes de Astro como a los de framework, como props.

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];
---
<!-- Data fetched at build can be rendered in HTML -->
<h1>User</h1>
<h2>{randomUser.name.first} {randomUser.name.last}</h2>
<!-- Data fetched at build can be passed to components as props -->
<Contact client:load email={randomUser.email} />
<Location city={randomUser.location.city} />

La función fetch() también está disponible globalmente para cualquier componente de framework:

src/components/Movies.tsx
import type { FunctionalComponent } from 'preact';
const data = await fetch('https://example.com/movies.json').then((response) => response.json());
// Components that are build-time rendered also log to the CLI.
// When rendered with a `client:*` directive, they also log to the browser console.
console.log(data);
const Movies: FunctionalComponent = () => {
// Output the result to the page
return <div>{JSON.stringify(data)}</div>;
};
export default Movies;

Astro también puede usar fetch() para consultar un servidor GraphQL con cualquier consulta GraphQL válida.

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>Fetching information about Star Wars: A New Hope</h1>
<h2>Title: {film.title}</h2>
<p>Year: {film.releaseDate}</p>

Los componentes de Astro pueden obtener datos de tu CMS favorito y luego renderizarlos como el contenido de tu página. Mediante el uso de rutas dinámicas, los componentes pueden incluso generar páginas basadas en el contenido de tu CMS.

Consulta nuestras Guías de CMS para obtener todos los detalles sobre cómo integrar Astro con CMS headless, incluidos Storyblok, Contentful y WordPress.

Contribuir Comunidad Patrocinar