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를 동적으로 설정가능함
https://vercel.com/
에서 add new -> project를 통해 손쉽게 deploy가능
이때, 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>
);
}
결과
