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

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

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

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

Nuxt.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1423閲覧

【Nuxt.js】getterが呼び出されない

FumiakiNakao

総合スコア180

Vue.js

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

Nuxt.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/05/14 12:45

問題の詳細

Nuxtで以下のような挙動をするサービスを書いています

  1. /examples/{id}にアクセスすると、fetch関数内でidを元にapiにリクエストを送り、データをstoreに格納する
  2. ..mapGettersでstoreのstateに格納されたデータをcomputedで取得、画面上に表示する

具体的なコードは以下の通りです(都合上一部省略しております)

js

1//examples/_id.vue 2 3<template> 4 <div> 5 {{example}} 6 </div> 7</template> 8 9<script> 10import {mapGetters} from 'vuex' 11export default { 12 async fetch({store, params}){ 13 await store.dispatch('example/fetch', route.params.id) 14 }, 15 16 computed: { 17 ...mapGetters('example', ['example']) 18 } 19} 20</script>

js

1//store/example.js 2export const state = () => { 3 example: {} 4} 5 6export const getters = { 7 example: (state) => state.example 8} 9 10export const mutations = { 11 setExample(state, payload) { 12 state.example = payload 13 }, 14} 15 16export const actions = { 17 /* 18 idから該当のexampleを取得 19 */ 20 async fetch({ commit }, id) { 21 //http request的なコード 取得したexampleがデータ変数に入っている想定 22 commit("setExample", data) 23 }, 24}

ここで、以下のような操作をしたとき、example2のページにexample1のデータが表示されてしまいます

  1. 各exampleへのリンクがあるtopページからexample/1にアクセス(このとき、example1のデータが正常に表示されている)
  2. ブラウザバックして、topページに戻る
  3. example2にアクセス(このときexample2のデータが表示されてほしいがなぜがexample1のデータが表示される)

また、特徴として、そのページでリロードを行うと、次から上記の挙動をした際に正常な表示がされます(すなわち、example/2のページにexample2のデータが表示されている)

試してみたこと

上記storeのgetterとmutationの関数内に、console.logを配置し、しっかりデータがとれているか(また関数が呼びダサえているか)を確認しました

結果、上記工程の3番において、getter関数が呼び出されていない(getter内のconsole.logが発火していない)ことがわかりました(mutaiton内のconsole.logは表示されており、取得されているデータもexample2のままでした)

質問したいこと

  1. 上記のような動作で、getterが呼び出されていないのはなぜか
  2. この状況を解決するためにはどうしたらよいか

以上、おわかりの方がいらっしゃればご教示お願いいたします

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問