\r\n```\r\n子のコンポーネント\r\n``` js\r\n\r\n\r\n\r\n```\r\n\r\nstore\r\n``` js\r\nexport const state = () => {\r\n data: []\r\n}\r\n\r\nexport const getters = {\r\n data: (state) => state.data,\r\n}\r\n\r\nexport const mutations = {\r\n setData(state, payload) {\r\n state.data = payload\r\n },\r\n}\r\n\r\nexport const actions = {\r\n async update({ commit }) {\r\n //APIとの通信部(http pluginに関するコードは割愛)\r\n const { data, error } = await this.$http().get(\r\n url //urlが入る\r\n )\r\n if (error) {\r\n throw new Error('失敗')\r\n }\r\n commit('setData', data)\r\n },\r\n}\r\n\r\n```\r\n\r\n## 起きている問題\r\n子のコンポーネント内の`data`が更新されない\r\n\r\n## 状況確認(調べたこと)\r\n- APIからのレスポンスは正常に返ってきており、かつ毎回変わっている(`console.log`で確認)\r\n- mutationは正常に呼び出されており、payloadも正しく渡されている(`console.log`で確認)\r\n- mapGettersをmapStateに変えて試してみたが、結果は変わらなかった(ボタン押下後も値は更新されなかった)\r\n\r\n\r\n以上、素人質問で恐縮ですが、ご教示お願いいたします\r\nまた、上記コードは実際のコードを簡略化して書いたものですので、抜け漏れなどありましたらご容赦ください","answerCount":1,"upvoteCount":0,"datePublished":"2020-09-23T01:29:18.522Z","dateModified":"2022-01-12T10:55:45.698Z","suggestedAnswer":[{"@type":"Answer","text":"storeのmutationでpayloadをセットしていますが、これだとstoreのdataが上書きされた状態になり、\r\nハンドリングが効かなくなります。(配列はオブジェクトの場合は要注意!)\r\n\r\n例えば以下のようにしてみてはいかがでしょう?\r\n\r\n配列のpushを使って、payloadから詰め替えるようにしてみてはいかがでしょう?","dateModified":"2020-09-23T02:22:42.874Z","datePublished":"2020-09-23T02:22:42.874Z","upvoteCount":0,"url":"https://teratail.com/questions/293478#reply-415013","comment":[]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/Vue.js","name":"Vue.jsに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/293478","name":"【Nuxt.js】mapGettersで取得した値が更新されない"}}]}}}
質問するログイン新規登録

Q&A

1回答

3191閲覧

【Nuxt.js】mapGettersで取得した値が更新されない

FumiakiNakao

総合スコア180

Vue.js

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

Nuxt.js

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

Vuex

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

0グッド

0クリップ

投稿2020/09/23 01:29

0

0

Nuxt.jsを用いたアプリ作成中に、上記疑問にあたったので質問させてください

やりたいこと(概要)

ボタンをクリックした際に、APIと通信してデータを取得 => 取得した値を元に子のコンポーネントのviewを更新したい

やりたいこと(コード)

親のコンポーネント

js

1<template> 2 <div> 3 <button @click="update">更新</button> 4  <Child /> 5 </div> 6</template> 7 8<script> 9import Child from '~/components/Child' 10export default { 11 components: { 12 Child 13 }, 14 methods: { 15 async update(){ 16 this.$store.dispatch('store/update') 17 } 18 } 19} 20</script>

子のコンポーネント

js

1<template> 2 <div> 3 {{data}} <!--この値が更新されて欲しい--> 4 </div> 5</template> 6 7<script> 8import {mapGetters} from 'vuex' 9export default { 10 computed: { 11 ...mapGetters('store', ['data']) 12 } 13} 14</script>

store

js

1export const state = () => { 2 data: [] 3} 4 5export const getters = { 6 data: (state) => state.data, 7} 8 9export const mutations = { 10 setData(state, payload) { 11 state.data = payload 12 }, 13} 14 15export const actions = { 16 async update({ commit }) { 17 //APIとの通信部(http pluginに関するコードは割愛) 18 const { data, error } = await this.$http().get( 19 url //urlが入る 20 ) 21 if (error) { 22 throw new Error('失敗') 23 } 24 commit('setData', data) 25 }, 26} 27

起きている問題

子のコンポーネント内のdataが更新されない

状況確認(調べたこと)

  • APIからのレスポンスは正常に返ってきており、かつ毎回変わっている(console.logで確認)
  • mutationは正常に呼び出されており、payloadも正しく渡されている(console.logで確認)
  • mapGettersをmapStateに変えて試してみたが、結果は変わらなかった(ボタン押下後も値は更新されなかった)

以上、素人質問で恐縮ですが、ご教示お願いいたします
また、上記コードは実際のコードを簡略化して書いたものですので、抜け漏れなどありましたらご容赦ください

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

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

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

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

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

guest

回答1

0

storeのmutationでpayloadをセットしていますが、これだとstoreのdataが上書きされた状態になり、
ハンドリングが効かなくなります。(配列はオブジェクトの場合は要注意!)

例えば以下のようにしてみてはいかがでしょう?

配列のpushを使って、payloadから詰め替えるようにしてみてはいかがでしょう?

投稿2020/09/23 02:22

mr-hisa-child

総合スコア294

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問