export const API_URL = "";
async function getMovies() {
// await new Promise((res)=>setTimeout(res,1000))
const json = await(await fetch(API_URL)).json();
return json
}
export default async function HomePage(){
const movies = await getMovies();
const [movie, videos] = await Promise.all([getMovie(id),getVideo(id)])
<Suspense fallback={<h3>Loading... </h3>}>
<MovieInfo id={id}/>
</Suspense>
<Suspense>
<MovieVideo id={id}/>
</Suspense>
import "./styles/global.css"
//Home.tsx
import styles from './Home.module.css'
<div className={style.wrap}
//Home.module.css
wrap{}
wrap p{} //클래스 네임이 앞에 있으면 태그 사용 가능
prefetch를 사용하게 되면 해당페이지로 이동하기전에 미리 데이터가 prefetch되어있다//router
import { useRouter } from "next/navigation";
const router = useRouter();
const onClick = () => {
router.push(`/movie/${id}`);
};
<img src={poster_path} alt={title} onClick={onClick} />
//Link
<Link href={`/movie/${id}`}>{title}</Link>
export async function getMovie(id:string){
const json = await(await fetch(`${API_URL}/${id}`)).json();
return json
}
//==========================================================
interface IParams{
params: { id: string };
}
export async function generateMetadata({params:{id}}:IParams) {
const movie = await getMovie(id)
return {
title:movie.title
}
}
data fetch를 server component에서 하면 보안에 안전하다는 것을 배웠고, data가 여러개일때 promise.all를 사용한 fetch와 suspense를 사용한 fetch를 배웠고 둘의 차이점도 알게 되었다.
또 동적인 페이지의 head title 그에 맞춰 동적으로 변할 수 있는 generateMetadata도 배웠는데 편리한거 같다.
아직은 익숙하지 않지만 크게 어려운점은 없는거 같은데 더 많은것을 해봐야 알거같다.