✍️ What I Learned/TIL

[TIL] Next.js 13 - getStaticProps, getStaticPaths (feat. 12λ²„μ „μ—μ„œμ˜ getServerSideProps)

Jiwon() 2023. 8. 18. 22:26

πŸ’‘ TIL 20230818 - Next.js 13 - getStaticProps, getStaticPaths (feat. 12λ²„μ „μ—μ„œμ˜ getServerSideProps)


1. 12버전 : getServerSideProps

Next.js 12λ²„μ „μ—μ„œλŠ” Data Fetchingμ‹œ pre-rendering ν•˜λ €λ©΄ getServerSideProps ν•¨μˆ˜λ₯Ό μ‚¬μš©ν–ˆμ—ˆλ‹€.

 

1) getServerSideProps μ½”λ“œ μ˜ˆμ‹œ

import Seo from "../../components/Seo";
import { useRouter } from "next/router";

export default function Detail({ params }) {
  const router = useRouter();
  const [title, id] = params || [];
  return (
    <div>
      <Seo title={title} />
      <h4>{title}</h4>
    </div>
  );
}

export function getServerSideProps({ params: { params } }) {
  return {
    props: {
      params,
    },
  };
}

λ…Έλ§ˆλ“œμ½”λ” Next.js 무료 κ°•μ˜λ₯Ό λ“€μœΌλ©΄μ„œ, κ°•μ˜μ—μ„œ μ§„ν–‰ν–ˆλ˜ Next.js 12버전 μ½”λ“œμ΄λ‹€. μœ„ μ½”λ“œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μž‘μ„±λμœΌλ―€λ‘œ, 이 μ½”λ“œλ₯Ό νƒ€μž…μŠ€ν¬λ¦½νŠΈ+Next.js 13λ²„μ „μœΌλ‘œ μˆ˜μ •ν•΄μ„œ μž‘μ„±ν•΄λ³΄μ•˜λ‹€.

 

 


2. 13버전 : getStaticProps, getStaticPaths

Next.js 13λ²„μ „μ—μ„œλŠ” getStaticProps, getStaticPaths ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ Fetching dataλ₯Ό pre-render ν•  수 μžˆλ‹€.

1) 13λ²„μ „μœΌλ‘œ λ¦¬νŒ©ν† λ§

μœ„μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ+12버전 μ½”λ“œμ—μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ+13λ²„μ „μœΌλ‘œ μˆ˜μ •ν•œ μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

import Seo from "@/components/Seo";
import { GetStaticPropsContext } from "next";
// import { useRouter } from "next/router";
import React from "react";

interface DetailProps {
  params: [string, string];
}

const Detail = ({ params }: DetailProps) => {
  // router.queryλ₯Ό 보면 파일λͺ…μ—μ„œ μ„€μ •ν•΄μ€€ movieIdκ°€ keyκ°’μœΌλ‘œ λ“€μ–΄κ°€μžˆμŒ
  const [title, id] = params || [];
  return (
      <div>
        <Seo title={title} />
        <h4>{title}</h4>
      </div>
  );
};

export default Detail;

interface ParamsProps {
  params: {
    params: GetStaticPropsContext
  }
};

// 1. URL에 λ“€μ–΄μžˆλŠ” μ˜ν™”μ œλͺ©μ„ μ‚¬μš©ν•˜μ—¬ SEO μ΅œμ ν™”
// 2. μœ μ €κ°€ μ ‘μ†ν•˜κΈ° 전에 <title></title> 제λͺ©μ„ λ³€κ²½ν•΄μ„œ 보여주고 싢을 λ•Œ
export const getStaticProps = async ({params: { params }}: ParamsProps) => {
  return {
      props: { params },
  };
};

export const getStaticPaths = async () => {
  return {
    paths: [], // 동적 κ²½λ‘œκ°€ μ—†μœΌλ―€λ‘œ 빈 λ°°μ—΄λ‘œ μ„€μ •
    fallback: 'blocking', // λ‹€λ₯Έ 경둜둜의 접근은 μ„œλ²„ μ‚¬μ΄λ“œμ—μ„œ λŒ€κΈ°
  };
};

 

 


μ°Έκ³  μ‚¬μ΄νŠΈ

λ…Έλ§ˆλ“œμ½”λ” - NextJS μ‹œμž‘ν•˜κΈ°