|
|
@@ -0,0 +1,65 @@ |
|
|
|
import React, { FC } from "react"; |
|
|
|
import { GetStaticPaths, GetStaticProps, GetStaticPropsContext } from "next"; |
|
|
|
import { fetchGuitarDetail, fetchGuitars } from "../../lib/strapi"; |
|
|
|
import { ParsedUrlQuery } from "querystring"; |
|
|
|
import { Guitar } from "../../type/guitars"; |
|
|
|
import Image from "next/image"; |
|
|
|
|
|
|
|
const Detail: FC<Props> = ({ guitar }) => { |
|
|
|
return ( |
|
|
|
<div> |
|
|
|
<div>ID: {guitar?.id}</div> |
|
|
|
<div>名前:{guitar?.attributes.name}</div> |
|
|
|
<div>説明:{guitar?.attributes.description}</div> |
|
|
|
<div> |
|
|
|
<Image |
|
|
|
src={guitar?.attributes.image.data[0].attributes.url} |
|
|
|
height={240} |
|
|
|
width={560} |
|
|
|
/> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
); |
|
|
|
}; |
|
|
|
|
|
|
|
interface Props { |
|
|
|
guitar: Guitar; |
|
|
|
} |
|
|
|
|
|
|
|
interface IParams extends ParsedUrlQuery { |
|
|
|
id: string; |
|
|
|
} |
|
|
|
|
|
|
|
// =============================== |
|
|
|
// 静的サイト作成時にはgetStaticPropsの中で |
|
|
|
// 表示データを作成する |
|
|
|
// =============================== |
|
|
|
export const getStaticProps: GetStaticProps = async (ctx) => { |
|
|
|
const { id } = ctx.params as IParams; |
|
|
|
const guitar = await fetchGuitarDetail(id); |
|
|
|
return { |
|
|
|
props: { |
|
|
|
guitar, |
|
|
|
}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
// ================================ |
|
|
|
// 表示可能なデータを取得する |
|
|
|
// ================================ |
|
|
|
export const getStaticPaths: GetStaticPaths = async () => { |
|
|
|
const guitars = await fetchGuitars(); |
|
|
|
// とりうるIDの一覧を取得する |
|
|
|
const paths = guitars.map((guitars) => ({ |
|
|
|
params: { |
|
|
|
id: guitars.id.toString(), |
|
|
|
}, |
|
|
|
})); |
|
|
|
|
|
|
|
return { |
|
|
|
paths, |
|
|
|
fallback: true, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
export default Detail; |