LoginSignup
15
11

More than 5 years have passed since last update.

Vue.jsのコンポーネント間のシンプルな通信

Last updated at Posted at 2019-03-06

概要

Vue.jsのコンポーネント間での通信をまとめました。初心者向けです。
Vuexを使用しない方法と、使用した方法のサンプルを元に説明します。

Vue.jsのみ

See the Pen Vue.js Simple Components Communication by T_Y (@ymnk) on CodePen.

説明

親コンポーネントと子コンポーネントとで相互に通信しているサンプルです。
本やブログには、親から子はprops、子から親はeventと書いてあることが多いです。
ですが、それだけでは不十分だと感じたので、少し丁寧に説明してみます。

親から子へ値を渡す

親コンポーネントのボタンを押すと子コンポーネントの値が増える。

  1. 子コンポーネント:受け取る値をpropsで設定する。
  2. 親コンポーネント:子コンポーネントに渡す値をdataで設定する。
  3. 子コンポーネントのタグ:v-bindディレクティブを設定して1と2を紐づける。

親から子のメソッドを実行する

親コンポーネントのボタンを押すと、子コンポーネントのデザインが切り替わる。

  1. 子コンポーネント:親コンポーネントから実行するメソッドを設定する。
  2. 子コンポーネントのタグ:refを設定する。
  3. 親コンポーネント:$refsを使い、子コンポーネントのメソッドを実行する。

子から親のメソッドを実行する

子コンポーネントのボタンを押すと、親コンポーネントの値が増える。

  1. 親コンポーネント:子コンポーネントから呼び出すメソッドを設定する。
  2. 子コンポーネントのタグ:v-onディレクティブを設定し、子コンポーネントから1を実行できるようにする。
  3. 子コンポーネント:$emitを使って2を実行する。

Vue.js + Vuex

See the Pen Vue.js Components Communication With Vuex by T_Y (@ymnk) on CodePen.

説明

Vuexは複雑なアプリケーションの状態管理をするためのライブラリです。適切なデータフローを設計するために使います。
値をstoreで一括管理することで、どのコンポーネントからでも使用できるようになります。
サンプルでは、親コンポーネントのボタンからstoreを更新し、子コンポーネントで値を表示しています。

Storeの説明

名前 役割 呼び出し方
state 値の一覧 store.state.名前
getters 値の取得 store.getters('名前')
mutations 値の設定 store.comit('名前', 値)
actions 値の計算と設定 store.dispatch('名前')

注意事項

  • 単一コンポーネント使った場合、呼び出しはstoreでなくthis.$storeと書く。
  • statestore.stateで直接呼ばず、gettersに統一するようルール化するとよい。
15
11
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
15
11