[TIL] Next.js 13 - getStaticProps, getStaticPaths (feat. 12λ²μ μμμ getServerSideProps)
π‘ 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 μμνκΈ°