詳しくは公式
Gatsby ではプラグインを使用して様々な機能を使うことができます。 流れとしては下記の通り
- npm を使用してプラグインをインストール。
- gatsby-config.jsファイルでプラグインを構成。
- 必要に応じて、プラグイン機能を使用。
GraphQL Typegen
gatsby-plugin-graphql-codegenが使えるとのことで見に行ったらgatsby-plugin-typegen使ってねって言われていた。
Hi there ? Are you just looking for a way to generate graphql types for your graphql queries? gatsby-plugin-graphql-codegen is what you want. However, other maintainers and I haven't been able to keep this repo up to shape. Please have a look at @cometkim's graphql-plugin-typegen which does almost the same thing & better maintained. Still, ideas & PRs are all welcomed. If you'd like to help maintain this project, please feel free to reach out. Thank you, have a great day
https://github.com/d4rekanguok/gatsby-typescript
と、思っていろいろ調べていたら v4.15.0 でGraphQL Typegenの機能として提供されることとなったのらしいので、そちらを使う。
- gatsby develop する
- src/gatsby-types.d.ts のファイルが自動生成される
前提条件として gatsby-config.js で graphqlTypegen が true となっている必要があります。
module.exports = {
graphqlTypegen: true,
}
あとはクエリをかいていきます。
import * as React from 'react'
import { graphql, PageProps } from "gatsby"
import Layout from '../components/layout'
const IndexPage = ({ data }: PageProps<Queries.IndexPageQuery>) => {
return (
<Layout>
<p>{data.site?.siteMetadata?.title}</p>
</Layout>
)
}
export const query = graphql`
query IndexPage {
site {
siteMetadata {
title
}
}
}
`
export default IndexPage
自動型生成がきかなくなるので、コンポーネント名(export default IndexPage)とクエリ名(query IndexPage)は一致させる必要があります。またパスカルケースが推奨されています。 IndexPage の生成した型定義は IndexPageQuery のように Query をつけた名称で使います。 PageProps を import して、引数に { data }: PageProps<Queries.IndexPageQuery> を設定します。これで取得したデータが data に格納されます。実際にデータを表示する時は下記のようになります。
<p>{data.site?.siteMetadata?.title}</p>