ギャツビーが生成したWebサイトで、スラッグをパラメーターとして使用するルートを作成したいと考えています。
ルート/projects/<slug>
にあるプロジェクトのリストがあります。
通常、ルータを反応させると、次のようなルートが作成されます。
<Route exact path='/projects/:project' component={Projects} />
ギャツビーのようですが、./pages
ディレクトリの下に新しいファイルを作成する必要があり、それによって新しいルートが作成されます。 projects
というページがあります。ここでは、ルートパラメータを調べてみましたが、404ページしか取得していないようです。
// ./pages/projects.js
class SingleProject extends Component {
state = {
project: {}
}
componentDidMount(){
const project = this.props.projects.find(project => project.slug === this.props.match.params.project)
this.setState({project})
}
render() {
return (
<div className="single-project" >
</div>
)
}
}
export default SingleProject;
ギャツビーでパラメーター付きのルートを作成するにはどうすればよいですか?
私はちょうど クライアントのみのルート に遭遇しましたが、これらのルートは静的に生成されないと思います。
スラグの定義済みリストがあるので、プロジェクトスラグごとにページを作成する方法はあるでしょうか。私が持っている./pages/projects/<slug>
foreachプロジェクト内に手動でファイルを作成できると思いますか?
Gatsbyがgatsby-node.js
の- createPage
API内で提供するcreatePages
メソッドを使用する必要があります。これを正確に達成できることを示す ガイド がギャツビーのドキュメントにあります。 これはさらに簡単な例です 同様の質問から。
export const createPages = ({ actions }) => {
const { createPage } = actions;
createPage({
path: '/projects/hello-world',
component: SingleProject,
// Send additional data to page component
context: {
id: 'hello-world',
},
});
};