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に変えて試してみたが、結果は変わらなかった(ボタン押下後も値は更新されなかった)
以上、素人質問で恐縮ですが、ご教示お願いいたします
また、上記コードは実際のコードを簡略化して書いたものですので、抜け漏れなどありましたらご容赦ください
あなたの回答
tips
プレビュー