Next.js-プレレンダリング
Next.jsでは、事前レンダリングと呼ばれるページのHTMLを生成することがわかっています。Next.JSは、2種類の事前レンダリングをサポートしています。
Static Generation−このメソッドは、ビルド時にHTMLページを生成します。この事前にレンダリングされたHTMLは、リクエストごとに送信されます。この方法は、マーケティングWebサイト、ブログ、Webサイト、ヘルプ、ドキュメントWebサイトを一覧表示するeコマース製品に役立ちます。
Server Side Generation−このメソッドは、リクエストごとにHTMLページを生成します。この方法は、HTMLページのコンテンツがリクエストごとに異なる可能性がある場合に適しています。
ページごとの事前レンダリング
Next.JSを使用すると、ほとんどのページが静的生成に従い、他のページがサーバー側のレンダリングを使用する各ページの事前レンダリング方法を設定できます。
データなしの静的生成
静的生成はデータなしで実行できます。その場合、HTMLページは、データをプリフェッチしてからレンダリングを開始する必要なしに準備が整います。データは後で、または要求に応じてフェッチできます。この手法は、データの取得に時間がかかる場合に備えて、データなしでユーザーインターフェイスをユーザーに表示するのに役立ちます。
データを使用した静的生成
静的生成はデータを使用して実行できます。その場合、HTMLはデータに依存している可能性があるため、データがフェッチされるまでHTMLページの準備はできません。各コンポーネントには特別なメソッドがありますgetStaticProps これを使用して、データをフェッチし、ページの小道具としてデータを渡すことができるため、渡された小道具に従ってページをレンダリングできます。
getStaticProps()関数は、本番環境ではビルド時に実行され、開発モードではすべてのリクエストに対して実行されます。
同じことを示す例を作成しましょう。
この例では、更新index.jsページとfirst.jsページを作成して、サーバーにヒットさせてデータを取得します。
グローバルCSSサポートの章で使用されているnextjsプロジェクトを更新しましょう。
getServerSideProps()メソッドを使用するようにpagesディレクトリのindex.jsファイルを更新します。このメソッドは、リクエストごとに呼び出されます。
import Link from 'next/link'
import Head from 'next/head'
function HomePage(props) {
return (
<>
<Head>
<title>Welcome to Next.js!</title>
</Head>
<div>Welcome to Next.js!</div>
<Link href="/posts/first"><a>First Post</a></Link>
<br/>
<div>Next stars: {props.stars}</div>
<img src="/logo.png" alt="TutorialsPoint Logo" />
</>
)
}
export async function getServerSideProps(context) {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return {
props: { stars: json.stargazers_count }
}
}
export default HomePage
getStaticProps()メソッドを使用するようにpagesディレクトリのfirst.jsファイルを更新します。このメソッドは1回呼び出されます。
import Link from 'next/link'
import Head from 'next/head'
import Container from '../../components/container'
export default function FirstPost(props) {
return (
<>
<Container>
<Head>
<title>My First Post</title>
</Head>
<h1>My First Post</h1>
<h2>
<Link href="/">
<a>Home</a>
</Link>
<div>Next stars: {props.stars}</div>
</h2>
</Container>
</>
)
}
export async function getStaticProps() {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return {
props: { stars: json.stargazers_count }
}
}
Next.jsサーバーを起動します
次のコマンドを実行してサーバーを起動します-。
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
出力を確認する
ブラウザでlocalhost:3000を開くと、次の出力が表示されます。
最初の投稿リンクをクリックします。