[NextJS14] Deployment

foresec·2024년 1월 22일

NextJS

목록 보기
5/6

1. Dynamic Metadata

import { Suspense } from "react";
import MovieInfo, { getMovie } from "../../../../components/movie-info";
import MovieVideos from "../../../../components/movie-videos";

interface IParams {
  params: { id: string };
}

export async function generateMetadata({ params: { id } }: IParams) {
  const movie = await getMovie(id);
  return {
    title: movie.title,
  };
}

export default async function MovieDetail({ params: { id } }: IParams) {
  return (
    <div>
      <Suspense fallback={<h1>Loading Movie info</h1>}>
        <MovieInfo id={id} />
      </Suspense>
      <Suspense fallback={<h1>Loading Movie videos</h1>}>
        <MovieVideos id={id} />
      </Suspense>
    </div>
  );
}

위와 같이 params를 활용해서 metadata를 동적으로 설정가능함

  • 이 때, fetch로 받아온 데이터는 캐싱되므로 여러번의 fetch코드가 있더라도 캐싱된 데이터가 재사용됨

2. Deploy with vercel

https://vercel.com/
에서 add new -> project를 통해 손쉽게 deploy가능

prefetch

이때, prefetch를 사용하면 빌드가 훨씬 빨라진다

nextjs의 preload 덕분인데, user가 클릭하기전에 fetch해버림

"use client"
import Link from "next/link";
import styles from "../styles/movie.module.css";
import { useRouter } from "next/navigation";

interface MovieProps {
  title: string;
  id: string;
  poster_path: string;
}

export default function Movie({ title, id, poster_path }: MovieProps) {
  const router = useRouter();
  const onClick = () => {
    router.push(`/movies/${id}`);
  };
  return (
    <div className={styles.movie}>
      <img src={poster_path} alt={title} onClick={onClick} />
      // prefetch here!!!!!!!!!
      <Link prefetch href={`/movies/${id}`}>{title}</Link>
    </div>
  );
}

결과


profile
왼쪽 태그보다 시리즈 위주로 구분

0개의 댓글