VueJS: computedで得たListをlist rendering し、かつその値を変更させる必要があるとき

vue@2.6.11

 

Example

computed: {

  items() {

    this.$store.state.items

  }

}

 

itemsは{name: "ITEM_NAME", quantity: 0}の複数配列とする。

<v-for item in items :key=item.key>

  {{ item.name }}

  <v-btn @click="item.quantity++"></>

</>

 

>>>>> 

computedは基本的にgetterとして使用するのでボタンを押してもquantityの値を変化させられない。

setterを定義することもできるがlist renderingを使用していると面倒そう。

ref: https://vuejs.org/v2/guide/computed.html#Computed-Setter

 

>>>

computedで得た値をそのままデータに代入

data() {

  return {

    items: null

  }

}

computed: {

  computedItems() {

    this.$store.state.items

  }

}

mounted() {

  this.items = this.computedItems

}

 

これでボタンをクリックすればquantityに即時反映されるようになる。