Astro 렌더링 컨텍스트
페이지를 렌더링할 때 Astro는 현재 렌더링에 특정한 런타임 API를 제공합니다. 여기에는 현재 페이지 URL과 같은 유용한 정보와 다른 페이지로 리디렉션하는 등의 작업을 수행하는 API가 포함됩니다.
.astro 컴포넌트에서 이 컨텍스트는 Astro 전역 객체에서 사용할 수 있습니다. 엔드포인트 함수도 이 동일한 컨텍스트 객체를 첫 번째 인수로 사용하여 호출되며, 그 속성은 Astro 전역 속성을 반영합니다.
일부 속성은 요청 시 렌더링되는 경로에서만 사용할 수 있거나 미리 렌더링된 페이지에서 기능이 제한될 수 있습니다.
Astro 전역 객체는 모든 .astro 파일에서 사용할 수 있습니다. 정적 또는 라이브 서버 엔드포인트를 제공하려면 엔드포인트 함수에서, 페이지 또는 엔드포인트가 렌더링될 때 동작을 삽입하려면 미들웨어에서 context 객체를 사용합니다.
컨텍스트 객체
섹션 제목: “컨텍스트 객체”다음 프로퍼티는 Astro 전역(예: Astro.props, Astro.redirect())에서 사용할 수 있으며 엔드포인트 함수 및 미들웨어에 전달되는 컨텍스트 객체(예: context.props, context.redirect())에서도 사용할 수 있습니다.
props
섹션 제목: “props”props는 컴포넌트 속성으로 전달된 값을 포함하는 객체입니다.
---const { title, date } = Astro.props;---<div> <h1>{title}</h1> <p>{date}</p></div>---import Heading from '../components/Heading.astro';---<Heading title="My First Post" date="09 Aug 2022" />props 객체에는 정적 경로를 렌더링할 때 getStaticPaths()에서 전달된 모든 props도 포함됩니다.
---export function getStaticPaths() { return [ { params: { id: '1' }, props: { author: 'Blu' } }, { params: { id: '2' }, props: { author: 'Erika' } }, { params: { id: '3' }, props: { author: 'Matthew' } } ];}
const { id } = Astro.params;const { author } = Astro.props;---import type { APIContext } from 'astro';
export function getStaticPaths() { return [ { params: { id: '1' }, props: { author: 'Blu' } }, { params: { id: '2' }, props: { author: 'Erika' } }, { params: { id: '3' }, props: { author: 'Matthew' } } ];}
export function GET({ props }: APIContext) { return new Response( JSON.stringify({ author: props.author }), );}더 보기: props로 데이터 전달
params
섹션 제목: “params”params는 요청과 일치하는 동적 경로 세그먼트의 값을 포함하는 객체입니다. 해당 키는 페이지 또는 엔드포인트 파일 경로의 매개변수와 일치해야 합니다.
정적 빌드에서는 동적 경로를 미리 렌더링하는데 사용되는 getStaticPaths()가 반환하는 params가 됩니다.
---export function getStaticPaths() { return [ { params: { id: '1' } }, { params: { id: '2' } }, { params: { id: '3' } } ];}const { id } = Astro.params;---<h1>{id}</h1>import type { APIContext } from 'astro';
export function getStaticPaths() { return [ { params: { id: '1' } }, { params: { id: '2' } }, { params: { id: '3' } } ];}
export function GET({ params }: APIContext) { return new Response( JSON.stringify({ id: params.id }), );}경로가 요청 시 렌더링될 때 params는 동적 경로 패턴의 경로 세그먼트와 일치하는 임의의 값일 수 있습니다.
---import { getPost } from '../api';
const post = await getPost(Astro.params.id);
// ID로 게시물을 찾을 수 없는 경우if (!post) { return Astro.redirect("/404")}---<html> <h1>{post.name}</h1></html>더 보기: params
url
섹션 제목: “url”타입: URL
astro@1.0.0
url은 현재 request.url 값으로 구성된 URL 객체입니다. pathname 및 origin과 같은 요청 URL의 개별 속성과 상호 작용할 때 유용합니다.
Astro.url은 new URL(Astro.request.url)을 수행하는 것과 동일합니다.
개발 모드에서 url은 localhost URL이 됩니다. 사이트를 빌드할 때 미리 렌더링된 경로는 site 및 base 옵션에 기반한 URL을 받게 됩니다. site가 구성되지 않은 경우 미리 렌더링된 페이지도 빌드 중에 localhost URL을 받게 됩니다.
<h1>The current URL is: {Astro.url}</h1><h1>The current URL pathname is: {Astro.url.pathname}</h1><h1>The current URL origin is: {Astro.url.origin}</h1>url을 new URL()의 인자로 전달하여 새 URL을 만들 수도 있습니다.
---// 예시: 프로덕션 도메인을 사용하여 canonical URL 생성const canonicalURL = new URL(Astro.url.pathname, Astro.site);// 예시: 현재 도메인을 사용하여 SEO 메타 태그의 URL 생성const socialImageURL = new URL('/images/preview.png', Astro.url);---<link rel="canonical" href={canonicalURL} /><meta property="og:image" content={socialImageURL} />site
섹션 제목: “site”타입: URL | undefined
site는 Astro 구성의 site에서 만든 URL을 반환합니다. Astro 구성에서 site에 대한 값을 설정하지 않은 경우 undefined를 반환합니다.
<link rel="alternate" type="application/rss+xml" title="Your Site's Title" href={new URL("rss.xml", Astro.site)}/>clientAddress
섹션 제목: “clientAddress”타입: string
astro@1.0.0
clientAddress는 요청의 IP 주소를 지정합니다. 이 속성은 요청 시 렌더링되는 경로에만 사용할 수 있으며 미리 렌더링된 페이지에는 사용할 수 없습니다.
---export const prerender = false; // 'server' 모드에서는 필요하지 않음---
<div>Your IP address is: <span class="address">{Astro.clientAddress}</span></div>export const prerender = false; // 'server' 모드에서는 필요하지 않음import type { APIContext } from 'astro';
export function GET({ clientAddress }: APIContext) { return new Response(`Your IP address is: ${clientAddress}`);}isPrerendered
섹션 제목: “isPrerendered”타입: boolean
astro@5.0.0
현재 페이지가 미리 렌더링된 페이지인지 여부를 나타내는 부울입니다.
이 속성을 사용하여 미들웨어에서 조건부 로직을 실행할 수 있습니다(예: 미리 렌더링된 페이지의 헤더에 액세스하지 않도록 하기 위해).
generator
섹션 제목: “generator”타입: string
astro@1.0.0
generator는 프로젝트가 실행 중인 Astro의 현재 버전을 제공합니다. 현재 사용 중인 Astro 버전과 함께 <meta name="generator"> 태그를 추가하는 편리한 방법입니다. 이 태그는 "Astro v5.x.x" 형식을 따릅니다.
<html> <head> <meta name="generator" content={Astro.generator} /> </head> <body> <footer> <p>Built with <a href="https://astro.build">{Astro.generator}</a></p> </footer> </body></html>