>웹 프론트엔드 >JS 튜토리얼 >최신 Next.js 앱 디렉토리에서 `getStaticProps`가 실행되고 정의되지 않은 상태로 반환되지 않는 이유는 무엇입니까?

최신 Next.js 앱 디렉토리에서 `getStaticProps`가 실행되고 정의되지 않은 상태로 반환되지 않는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-16 18:34:03630검색

Why Isn't `getStaticProps` Running and Returning Undefined in the Latest Next.js App Directory?

getStaticProps가 실행되지 않고 최신 Next.js에서 정의되지 않은 값을 반환합니다.

문제 설명

getStaticProps를 사용하여 API 끝점에서 데이터를 가져오려고 할 때 최신 버전의 Next.js에서는 함수가 실행되지 않고 반환된 데이터가 정의되지 않는 문제가 발생합니다. 이로 인해 정의되지 않은 속성을 읽을 수 없기 때문에 데이터를 매핑할 때 오류가 발생합니다.

해결책

getStaticProps는 서버에서 데이터를 가져오는 데 사용되지만, 서버 내의 페이지 구성 요소에만 적용 가능합니다. Pages 폴더는 Next.js에서 경로를 설정하는 전통적인 방법입니다.

앱 디렉토리를 사용하는 최신 Next.js 애플리케이션에서 서버 구성 요소는 보다 유연한 경로를 제공합니다. 데이터 가져오기에 대한 접근 방식입니다. 다음은 구성 요소 본문에서 데이터를 직접 가져오는 방법을 보여주는 코드 조각입니다.

import { cookies, headers } from "next/headers";

export default async function Component({ params, searchParams }) {
  const staticData = await fetch("https://...", { cache: "force-cache" });
  const dynamicData = await fetch("https://...", { cache: "no-store" });
  const revalidatedData = await fetch("https://...", { next: { revalidate: 10 } });

  return "...";
}

이 코드를 사용하면 강제 캐싱, 캐싱 없음 또는 재검증을 포함하여 가져온 데이터의 캐싱 동작을 제어할 수 있습니다. 지정된 기간.

또는 fetch()를 사용하지 않고 데이터를 가져올 수도 있습니다. 타사 라이브러리를 사용하거나 ORM으로 데이터베이스를 직접 쿼리하세요. 이 경우 경로 세그먼트 구성을 사용할 수 있습니다.

async function getPosts() {
  const posts = await prisma.post.findMany();
  return posts;
}

export default async function Page() {
  const posts = await getPosts();
  // ...
}

이 접근 방식을 사용하면 revalidate 속성을 통해 가져온 데이터의 캐싱 동작을 지정하거나 동적 속성을 사용하여 캐싱을 완전히 비활성화할 수 있습니다.

위 내용은 최신 Next.js 앱 디렉토리에서 `getStaticProps`가 실행되고 정의되지 않은 상태로 반환되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.