LoginSignup
0
0

More than 1 year has passed since last update.

コンポーネントの際はdataは関数にする必要がある

Last updated at Posted at 2021-05-08

関数にした場合

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>

<div id="app">
<my-component></my-component>
<my-component></my-component>
<my-component></my-component>
</div>
Vue.component('my-component',{
 data: function(){
   return {
     number: 12
   }
 },
 template: '<p>いいね({{number}})<button @click="increment">+1</button></p>',
 methods: {
  increment: function(){
    this.number+= 1;
      }
   }
})

new Vue({
 el: '#app',
})

20210508-093901.png

それぞれの表示した項目が別のメモリを使っているためにそれぞれ個別に保存できる。

オブジェクトで無理やりコンポーネントに設定した場合。(return内の外部オブジェクトにする)

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>

<div id="app">
<my-component></my-component>
<my-component></my-component>
<my-component></my-component>
</div>
var data = {
  number: 12
}

Vue.component('my-component', {
  data: function() {
    return data
  },
  template: '<p>いいね({{number}})<button @click="increment">+1</button></p>',
  methods: {
    increment: function() {
      this.number += 1;
    }
  }
})

new Vue({
  el: '#app',
})

これで+1ボタンを押すと

20210508-094728.png

20210508-094744.png

オブジェクトの場合は1つのメモリを共有することになるので+1を押しても3つとも同時に1づつ増加して同じ数字で表示されてしまう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0