반응형

React에서 구현하기 어려웠던 부분을

 

NextJS에서 간단하게 처리가 가능하다.

 

각 병렬처리할 컴포넌트를 만들어 준다.

 

import { API_URL } from "../app/(Home)/page";

async function getMovies(id: string) {
  await new Promise((resolve) => setTimeout(resolve, 2000));
  return fetch(`${API_URL}/${id}`).then((response) => response.json());
}

export default async function MovieInfo({ id }: { id: string }) {
  const movies = await getMovies(id);
  return <h6>{JSON.stringify(movies)}</h6>;
}

 

Movie정보를 가져오는 첫번째 컴포넌트 (MoiveInfo)

 

그리고

import { API_URL } from "../app/(Home)/page";

async function getVideos(id: string) {
  await new Promise((resolve) => setTimeout(resolve, 4000));
  return fetch(`${API_URL}/${id}/videos`).then((response) => response.json());
}

export default async function MovieVideos({ id }: { id: string }) {
  const videos = await getVideos(id);
  return <h6>{JSON.stringify(videos)}</h6>;
}

 

Movie Video를 가지고 오는 2번째 컴포넌트 (MovieVideos)

 

이렇게 만든 컴포넌트를 가지고 

 

원하는 페이지에서 <Suspense> 를 구성하여 코드를 작성하면

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

export default async function MovieDetail({
  params: { id },
}: {
  params: { id: string };
}) {
  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>
  );
}

 

이렇게 작성하면 await 동안에는 fallback이 작용하여

 

Loading movie info 와 Loading movie videos가 동시에 나타났다가,

 

fetch가 끝난 거 부터 병렬적으로 Json 데이터를 받아올 수 있다.

 

이 모든 병렬프로그래밍을 서버에서 진행한다는게 미쳤다..

 

 

반응형

'Front-End > NextJS' 카테고리의 다른 글

[NextJS] VsCode에 NextJS 설치 및 초기설정  (1) 2024.09.13

+ Recent posts