개발/Next.js

[Docs] 동적 라우트 - getStaticPaths 구현

yoosmg 2023. 5. 10. 14:48

이제 id값이 포함된 배열을 반환하 함수를 생성해줘야 한다.

 

lib/posts.js를 열고 하단에 다음과 같이 getAllPostIds 함수를 작성한다.

이 함수는 posts 디렉터리에 있는 파일 이름의 목록(.md 파일 제외)을 반환한다.

export function getAllPostIds() {
  const fileNames = fs.readdirSync(postsDirectory);

  // Returns an array that looks like this:
  // [
  //   {
  //     params: {
  //       id: 'ssg-ssr'
  //     }
  //   },
  //   {
  //     params: {
  //       id: 'pre-rendering'
  //     }
  //   }
  // ]
  return fileNames.map((fileName) => {
    return {
      params: {
        id: fileName.replace(/\.md$/, ''),
      },
    };
  });
}

중요

반환되는 목록은 단순한 문자열 배열이 아니라, 위의 주석과 같은 객체 배열이어야 한다.

각 객체에는 params 키가 있어야 하고 id 키가 있는 객체가 포함되어야 한다(파일 이름에 [id]를 사용하고 있기 때문).

그렇지 않으면 getStaticPaths는 정상 작동하지 않을 것이다.



마지막으로 getAllPostIds 함수를 임포트하여 getStaticPaths 내부에서 사용한다.

import { getAllPostIds } from '../../lib/posts';

export async function getStaticPaths() {
  const paths = getAllPostIds();
  return {
    paths,
    fallback: false,
  };
}

 

paths에는 getAllPostIds()가 반환한 경로의 배열이 포함되며, fallback은 일단 false로 두고진행하자.