LoginSignup
4
2

More than 3 years have passed since last update.

GraphCMS & Nuxt.jsで作った BlogでCMS側で自分が登録したSlugでルーティングする

Posted at

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がいいなと思ったものが形に出来ると気分がいいし、かっこいい。

4
2
0

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
  3. You can use dark theme
What you can do with signing up
4
2