import { fetchPokemonData } from "@/apis/pokemon";
fetchPokemonData
함수를 사용하여 특정 포켓몬의 데이터를 API로부터 가져옴.const typeColors: { [key: string]: string } = {
// 타입별 색상 매핑
};
const PokemonDetailPage = async ({ params }: { params: { id: string } }) => {
const pokemonData = await fetchPokemonData(params.id);
PokemonDetailPage
는 Next.js의 페이지 컴포넌트로, 비동기 함수를 사용하여 포켓몬 데이터를 가져옴.params.id
를 통해 동적 라우팅으로 포켓몬의 ID를 받아옴.return (
<div className="flex flex-col items-center p-4 bg-[#f8f5f2] ... font-ramche">
...
</div>
);
<div className="bg-white shadow-md rounded-lg p-6 w-full max-w-md">
<div className="flex justify-between items-center mb-4">
<h1 className="text-2xl font-bold">{pokemonData.korean_name}</h1>
<Link href="/" className="bg-blue-500 text-white py-2 px-4 rounded-full hover:bg-blue-700">뒤로가기</Link>
</div>
<Image src={pokemonData.sprites.front_default} alt={pokemonData.korean_name} width={128} height={128} className="w-32 h-32 mx-auto mb-4" />
</div>
<div className="flex flex-wrap gap-3 mb-4">
<h2 className="text-xl font-semibold">타입:</h2>
<ul className="flex flex-wrap gap-2">
{pokemonData.types.map((typeInfo: any) => (
<li key={typeInfo.type.name} className="text-lg px-2 py-1 rounded-full text-white" style={{ backgroundColor: typeColors[typeInfo.type.name] }}>
{typeInfo.type.korean_name}
</li>
))}
</ul>
...
</div>
<div className="mb-4">
<h2 className="text-xl font-semibold">신장 및 체중:</h2>
<ul className="flex flex-wrap gap-2">
<li className="text-lg">신장: {pokemonData.height} cm</li>
<li className="text-lg">체중: {pokemonData.weight} g</li>
</ul>
</div>
<div className="mb-4">
<h2 className="text-xl font-semibold">능력치:</h2>
<ul>
{pokemonData.stats.map((statInfo: any) => (
<li key={statInfo.stat.name} className="text-lg mb-2">
{statInfo.stat.name}: <span className="ml-2">{statInfo.base_stat}</span>
<div className="relative w-full h-4 bg-gray-200 rounded-full overflow-hidden">
<div className="absolute top-0 left-0 h-full bg-blue-500" style={{ width: `${(statInfo.base_stat / 255) * 100}%` }}></div>
</div>
</li>
))}
</ul>
</div>
next/image
사용 시 이미지 로드 문제next/image
컴포넌트를 사용하여 외부 URL에서 이미지를 로드하려고 할 때, 이미지가 제대로 로드되지 않는 문제가 발생했습니다. 이는 Next.js의 이미지 최적화 기능이 외부 URL을 처리하기 위해 추가적인 설정을 필요로 하기 때문입니다.
next.config.js
설정 추가이 문제를 해결하기 위해 next.config.js
파일에 다음과 같은 설정을 추가했습니다:
module.exports = {
images: {
remotePatterns: [
{
protocol: "https",
hostname: "raw.githubusercontent.com",
},
],
},
};