72
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vue.jsをシンプルに理解しよう その4 -propsとemitについて-

Last updated at Posted at 2018-07-29

その4です

今回はpropsとemitについて紹介します。
難しいというよりかは、ややこしいので順を追って理解しましょう。

概念

名称未設定 2018-07-28 23-43-17.png

propsとemitは親コンポーネントと子コンポーネント間での値の受け渡しに使います。
web系エンジニアの方なら、このような狂った親子ゲームには慣れてらっしゃいますよね?

具体例 props

まずpropsについてです、以下の図を見てください。

Vue - JSFiddle 2018-07-29 15-46-33.png

v-bindを使ってbindした変数などをpropsで受け取ることで、親コンポーネントから子コンポーネントに値を渡します。

JSFiddleで確認してください

ケバブケースとキャメルケース

更に注意点としてhtmlは大文字を認識してくれません。

だめな例
<my-component v-bind:childWord="parentWord"></my-component>

v-bind:の属性名はキャメルケースではなくケバブケースを用いましょう

いい例
<my-component v-bind:child-word="parentWord"></my-component>

しかしケバブケースではjsの方で受けとれなくなります、なぜなら変数名にハイフンが使えないからです。

だめな例
props: ['child-word']

vue.jsの粋な心遣いとして、htmlでケバブケースでv-bindした属性はpropsに渡ったときに勝手にキャメルケースに変換してくれます。(話をややこしくしている原因)

いい例
props: ['childWord']

以下の図は問題なく動作します

Vue - JSFiddle 2018-07-29 01-16-33.png

非常にややこしい

具体例 emit

次にemitについてです、以下の図が最も簡単で基本的なemit例になると思います

Vue - JSFiddle 2018-07-29 15-11-08.png

親コンポーネントはイベントを受け取るときはv-onディレクティブでイベントを受け取ります。v-bindではないので注意しましょう。
またイベントを受け取ったら基本的にmethodsで関数を実行するといいでしょう。

JSFiddleで確認してください

emitは実行場所を選びません、また以下の図のように引数を付けてイベントを実行し、引数を親コンポーネントで受け取ることもできます。

Vue - JSFiddle 2018-07-29 15-38-14.png

JSFiddleで確認してください

ケバブケースとキャメルケース

emitではキャメルケースとケバブケースを勝手に変換してくれたりはしません、なのでイベント名は常にケバブケースを使いましょう。

propsとemitを両方使う

Vue - JSFiddle 2018-07-29 17-47-56.png

書くのに疲れたのでJSFiddleで確認してください

v-forでたくさんコンポーネントを作って、propsで渡し、emitで受け取るのは結構使えるテクニックだと思うので覚えておくいいでしょう。

また注意点として、methodsなどからpropsの値を使う場合は以下のように

methods: {
  childFunction: function () {
    this.$emit('child-event', this.$props.childWord)
  }
}

と書きましょう

# おわり
おわり

72
60
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
72
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?