質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Q&A

1回答

642閲覧

Nuxt.jsでVuexを用いてURLのクエリスクリプトに応じた内容を表示させたい

YuzaburoEra

総合スコア4

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

0グッド

0クリップ

投稿2020/08/12 00:00

前提・実現したいこと

Nuxt.jsでVuexを用いてURLのクエリスクリプトに応じた内容を表示させたいです。

たとえば
http://localhost:3000/posts/3
にアクセスした場合は
store/posts.js
に記載されている
id=3
に該当するデータを表示したいです。

発生している問題・エラーメッセージ

現在postが表示されません……。
コンソールみたところ
id: this.$route.params.idはうまく機能してるみたいです。

該当のソースコード

pages/posts/_id.vue

pages/posts/_id.vue

1<template> 2 <div class="container"> 3 <h1>{{ post }}</h1> 4 <p>{{ id }}</p> 5 </div> 6</template> 7 8<script> 9export default { 10 data() { 11 return { 12 id: this.$route.params.id, 13 } 14 }, 15 computed: { 16 post() { 17 return this.$store.state.posts.all.find((post) => post.id === this.id) 18 }, 19 }, 20} 21</script>

store/posts.js

store/posts.js

1export const state = () => ({ 2 all: [ 3 { 4 id: 3, 5 name: "era", 6 meigen: "正義は勝つって、そりゃあ そうだろ、勝者だけが正義だ!!!!", 7 }, 8 { 9 id: 2, 10 name: "yamada", 11 meigen: "どんな未来も受け入れる、差し延べられた手は掴む…!!おれを裁く白刃も受け入れる……、もうジタバタしねェ、エース", 12 }, 13 { 14 id: 5, 15 name: "tanaka", 16 meigen: "おれ達は絶対にくいのない様に生きるんだ!!、いつか必ず海へ出て!!思いのままに生きよう!!誰よりも自由に!!", 17 }, 18 ], 19})

補足情報(FW/ツールのバージョンなど)

Vue.js 2.6.11
npm 6.14.7
Nuxt.js 2.11.0
firebase 8.6.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

this.$route.params.idはstring型です。
対して、post.idはnumber型なので一致するidが存在せず、postが表示されないというわけです。

this.$route.params.idをnumber型に変換することで解決されると思われます。

diff

1<template> 2 <div class="container"> 3 <h1>{{ post }}</h1> 4 <p>{{ id }}</p> 5 </div> 6</template> 7 8<script> 9export default { 10 data() { 11 return { 12-- id: this.$route.params.id, 13++ id: parseInt(this.$route.params.id, 10) 14 } 15 }, 16 computed: { 17 post() { 18 return this.$store.state.posts.all.find((post) => post.id === this.id) 19 }, 20 }, 21} 22</script>

投稿2020/08/21 13:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YuzaburoEra

2020/08/22 05:58

ありがとうございます!無事解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問