型「NextPage」の実装例
SSG について触れておきたいと思います。「SSG」とは、「Static Site Generation(静的サイト生成)」の略称です。スタティック・サイト・ジェネレーションと呼びます。
SSG ページの基本的な実装例です。次のように型を指定して、NextPage を実装します。
// 型のために導入
import { NextPage } from 'next'
// Next.jsの組み込みのコンポーネント
import Head from 'next/head'
// ページコンポーネントの props の型
type SSGProps = {}
// SSG向けのページを実装
const SSG: NextPage<SSGProps> = () => {
return (
<>
<Head>
<title>SSG</title>
</Head>
<main>
<p>SSG</p>
</main>
</>
)
}
export default SSG
外部 API から取得したデータを表示する
次は、外部 API から取得したブログ記事データを一覧表示する簡単なアプリケーションです。GetStaticProps を利用することで、ビルド時に API を呼び出して記事データを取得します。取得した記事データは、props に渡され、PostList コンポーネントで表示されます。
import { GetStaticProps } from 'next'
import { Post } from '../types'
import Layout from '..components/Layout'
import PostList from '..components/PostList'
type Props = {
posts: Post[]
}
const IndexPage = ({ posts }: Props) => (
<Layout>
<h1>Blog</h1>
<PostList posts={posts} />
</Layout>
)
export const getStaticProps: GetStaticProps = async () => {
const res = await fetch('<https://jsonplaceholder.typicode.com/posts>')
const posts: Post[] = await res.json()
return {
props: {
posts,
},
}
}
export default IndexPage
Markdown ファイルを読み込んで表示する
次は、指定された Markdown ファイルを読み込んで表示する簡単なアプリケーションです。GetStaticProps を利用することで、ビルド時に Markdown ファイルを読み込んで props に渡します。取得した Markdown データは、Markdown コンポーネントで表示されます。
import { GetStaticProps } from 'next'
import Layout from '..components/Layout'
import Markdown from 'react-markdown'
import fs from 'fs'
type Props = {
markdown: string
}
const IndexPage = ({ markdown }: Props) => (
<Layout>
<Markdown source={markdown} />
</Layout>
)
export const getStaticProps: GetStaticProps = async () => {
const markdown = fs.readFileSync('path/to/markdown.md', 'utf-8')
return {
props: {
markdown,
},
}
}
export default IndexPage