前提・実現したいこと
Nuxt.js(Vuetify)でボタンの値がカウントアップするような仕組みを作っています。
カウンタが複数個ある時に各ボタンをクリックしてそれぞれ独立にカウントアップができるようにしたいのですが、カウンタを配列で管理した時にクリックしてもv-btn内のテキストが変化しません。
出力よりカウンタの加算自体に問題がないことは確認しています。
問題の切り分けによりcounterが1個のとき、つまり配列を用いないときには本現象が発生しないことが分かっています。
恐らくmustache構文では配列の中身が更新されても表示される値が更新されないように思われますが、配列の中身が更新された時に画面描写される方法はありますでしょうか?
該当のソースコード
Nuxt.js
1<template> 2 <v-container> 3 <v-row dense> 4 <v-col v-for="(count, index) in counter" :key="count" cols="auto"> 5 <v-btn 6 width="100" 7 color="white" 8 @click="incrementCounter(index)" 9 > 10 {{ count }} 11 </v-btn> 12 </v-col> 13 </v-row> 14 </v-container> 15</template> 16 17<script> 18 export default { 19 asyncData() { 20 const counter = [0, 0] 21 return { 22 counter, 23 } 24 }, 25 methods: { 26 incrementCounter(index) { 27 this.counter[index]++ 28 console.log(this.counter) //counter自体は正常に加算されている 29 }, 30 }, 31 } 32</script>
試したこと
counterを一時的にディープコピーをして配列毎書き換えれば機能しますが少し冗長な気がします。
Nuxt.js
1<template> 2 <v-container> 3 <v-row dense> 4 <v-col v-for="(count, index) in counter" :key="count" cols="auto"> 5 <v-btn 6 width="100" 7 color="white" 8 @click="incrementCounter(counter, index)" 9 > 10 {{ count }} 11 </v-btn> 12 </v-col> 13 </v-row> 14 </v-container> 15</template> 16 17<script> 18 export default { 19 asyncData() { 20 const counter = [0, 0] 21 return { 22 counter, 23 } 24 }, 25 methods: { 26 incrementCounter(counter, index) { 27 const tmp = JSON.parse(JSON.stringify(counter)) 28 tmp[index] = this.counter[index] + 1 29 this.counter = tmp 30 }, 31 }, 32 } 33</script>
補足情報(FW/ツールのバージョンなど)
node v14.17.5
@nuxt/cli v2.15.8
vuetify 2.5.8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。