Vue.jsコンポーネント間の通信方法: $refs, $parent, $childrenの使い方

$refsの利用 $refsは、特定のコンポーネントインスタンスまたはDOM要素への参照を取得するために使用されます。コンポーネントまたはDOM要素を参照することで、そのプロパティやメソッドにアクセスできます。

基本的な使い方 コンポーネントにref属性を追加し、JavaScript内で$refsを通じてアクセスします。

<!-- コンポーネントにref属性を設定 -->
<user-profile ref="profileComponent"></user-profile>

<!-- JavaScript内で参照を取得 -->
<script>
export default {
  mounted() {
    // コンポーネントインスタンスへのアクセス
    const profile = this.$refs.profileComponent;
    console.log(profile.userName);
    profile.updateProfile();
  }
}
</script>

重要な注意点

mountedライフサイクルフック内で$refsを使用する場合、DOMが完全にロードされていない可能性があるため、注意が必要です。 メソッド内で$refsを使用する場合は、this.$nextTick()を利用してページのレンダリング完了を待つのが安全です。

$parentの利用 $parentは、親コンポーネントのインスタンスを取得するために使用されます。JavaScriptのparentNodeとは異なり、Vueコンポーネント専用の機能です。

基本的な使い方

<!-- 親コンポーネント -->
<template>
  <child-component></child-component>
</template>
<script>
export default {
  data() {
    return {
      parentValue: '親コンポーネントの値'
    }
  }
}
</script>
<!-- 子コンポーネント -->
<template>
  <button @click="accessParent">親の値を変更</button>
</template>
<script>
export default {
  methods: {
    accessParent() {
      // 親コンポーネントのプロパティにアクセス
      this.$parent.parentValue = '新しい値';
    }
  }
}
</script>

複数の親コンポーネントからの呼び出し 子コンポーネントが複数の親コンポーネントから呼び出される場合、$parentはそれぞれの呼び出し元の親コンポーネントインスタンスを返します。各親コンポーネントのプロパティを個別に変更できます。

$childrenの利用 $childrenは、親コンポーネント内のすべての子コンポーネントインスタンスのコレクションを取得します。JavaScriptのchildNodesとは異なり、Vueコンポーネントのみを対象とします。

基本的な使い方

<!-- 親コンポーネント -->
<template>
  <user-list></user-list>
  <admin-panel></admin-panel>
</template>
<script>
export default {
  mounted() {
    // 子コンポーネントの配列を取得
    const children = this.$children;
    console.log('子コンポーネント数:', children.length);
    
    // 特定の子コンポーネントにアクセス
    if (children[0]) {
      children[0].refreshData();
    }
  }
}
</script>

注意点 $childrenは子コンポーネントの配列を返しますが、配列の順序は保証されないため、特定の子コンポーネントにアクセスする場合は注意が必要です。

タグ: vue.js コンポーネント通信 $refs $parent $children

5月16日 13:53 投稿