getServerSidePropsとgetStaticProps
レンダリング方法を決定するデータ呼び出し方法
データが必要なページ上で構築するときにHTMLを静的に生成する場合は、getServer SidePropsメソッドを使用します.サーバリクエスト(ページアクセス)のたびにHTMLを動的に生成する場合は、getStaticPropsメソッドを使用します.
静的作成
getStaticProps
getStaticPropsは、構築時にapiを呼び出し、HTMLを完了するためにデータを受信する静的生成方法です.
export const getStaticProps = async () => {
const res = await fetch(
`https://jsonplaceholder.typicode.com/posts?_start=0&_end=10`
);
const posts = await res.json();
return {
props: {
posts,
},
revalidate: 20,
};
};
export const getStaticProps = async (context) => {
const { id } = context.params;
const res = await fetch(`https://jsonplaceholder.typicode.com/photos/${id}`);
const photo = await res.json();
return {
props: {
photo,
},
};
};
上はfake apiを利用してgetStaticPropsを使用しています.既に構築時にHTMLが作成されているため、サーバ上のデータが変化しても変更内容は有効になりません.ただし、Revalidateを使用して新しいデータを一定時間ごとに受信できます.nextが推奨する方法.
nextはページフォルダ内のフォルダ名を用いて自動的にルーティングする利点があり,id値を用いて詳細アドレスを作成するなどの動作時にgetStaticPathsが必要である.
getStaticPaths
export const getStaticPaths = async () => {
const res = await fetch(
`https://jsonplaceholder.typicode.com/photos?_start=0&_end=10`
);
const photos = await res.json();
const ids = photos.map((photo) => photo.id);
const paths = ids.map((id) => {
return {
params: { id: id.toString() },
};
});
return {
paths: paths,
fallback: false,
};
};
前述したようにparamsにpath値を入れればよい.動的作成
getServerSideProps
export const getServerSideProps = async () => {
const res = await fetch( `https://jsonplaceholder.typicode.com/posts?_start=0&_end=10`);
const posts = await res.json();
return {
props: {
posts,
},
};
};
上はfake apiを利用してgetServerSidePropsを使用しています.サーバデータが変化すると、データが要求されるたびに変更されたデータがバインドされます.しかし、HTMLを再作成するたびに時間がかかる場合があります.Reference
この問題について(getServerSidePropsとgetStaticProps), 我々は、より多くの情報をここで見つけました https://velog.io/@pomeranian91/getServerSideProps와-getStaticPropsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol