LoginSignup
2

More than 3 years have passed since last update.

posted at

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側でfielsslugを作って登録

cms側でslugを登録しておく。
この時、uniquerequireのbalidationをかけておく。

ルーティングの指定

自分の実装方法は、記事の一覧を取得取得した時点で、詳細ページの情報も全て取得しており、詳細ページに行く際に再度取得せず、idslugなどのユニークな値を用いて、該当ページに必要な情報を取得する方法であるので、ルーティングのパラメーターの部分を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がいいなと思ったものが形に出来ると気分がいいし、かっこいい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2