- 投稿日:2019-11-02T16:44:07+09:00
GraphCMS & Nuxt.jsで作った BlogでCMS側で自分が登録したSlugでルーティングする
GraphCMS & Nuxtjs Blogで動的ルーティング
やりたい事
https://hogehooge.app/post/<ここにCMSで自分が登録したSlug名を入れたい。>よくあるのはprimary keyとかに設定されている自動連番を入れていたりする。
https://hogehooge.app/post/1
みたいに。Nuxt.jsなので、動的なルーティングは簡単。
pages ├── index.vue └── posts └── _slug.vueよく
_id.vueとかにするが、分かりやすく_slug.vueと名付けてみる。
つまり何でもOK。CMS側で
fielsにslugを作って登録cms側で
slugを登録しておく。
この時、uniqueとrequireのbalidationをかけておく。ルーティングの指定
自分の実装方法は、記事の一覧を取得取得した時点で、詳細ページの情報も全て取得しており、詳細ページに行く際に再度取得せず、
idやslugなどのユニークな値を用いて、該当ページに必要な情報を取得する方法であるので、ルーティングのパラメーターの部分をslugの値にする。methods: { detail(slug) { // console.log(id) this.$router.push(`./posts/${slug}`) } }詳細ページ側で
findで記事取得。
自分の実装では、heroMenuのコンポーネントと、contents表示のコンポーネントの双方で、findで取得しているので、二つとも同じ事を書く。もっとDRYにできる方法がありそうだ。computed: { ...mapState(['posts']), post() { const targetPost = this.posts.find( v => v.slug === this.$route.params.slug ) return targetPost } }まとめ
SEOがよくなるとかあるのか分からないが、自動生成された、idを使うよりも、自分のこんな
slugがいいなと思ったものが形に出来ると気分がいいし、かっこいい。