Vue.js の計算プロパティの簡単なガイド

Vue.js には、計算を実行してコンポーネントの状態からデータを導出できる 計算プロパティ と呼ばれる強力な機能が用意されています。計算プロパティは、テンプレート コードを簡潔で読みやすい状態に保ちながら、反応型データ プロパティに基づいて複雑な計算や変換を実行する場合に特に便利です。

このガイドでは、Vue.js の計算プロパティの基本、メソッドとの違い、Vue コンポーネントで計算プロパティを効果的に使用する方法について説明します。

計算プロパティとは何ですか?

計算プロパティは、Vue コンポーネントの computed オブジェクト内で定義される関数です。メソッドとは異なり、計算プロパティは依存関係に基づいてキャッシュされます。つまり、依存関係の 1 つが変更された場合にのみ再評価されるため、コストのかかる操作に対してより効率的になります。

以下は、計算プロパティを使用する Vue コンポーネントの基本的な例です。

<template>
  <div>
    <p>Full Name: {{ fullName }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    };
  },
  computed: {
    fullName() {
      return this.firstName + ' ' + this.lastName;
    }
  }
};
</script>

この例では、fullName 計算プロパティは、firstNamelastName のデータ プロパティを組み合わせてフル ネームを返します。fullName は計算プロパティであるため、firstName または lastName が変更されるたびに自動的に更新されます。

計算プロパティとメソッド

一見すると、計算プロパティはメソッドと似ているように見えるかもしれません。どちらも計算を実行して結果を返すために使用できるからです。しかし、この 2 つには重要な違いがあります。

  • メソッド: メソッドは呼び出されるたびに再評価されます。つまり、結果はキャッシュされず、計算コストが高い場合は効率が低下する可能性があります。
  • 計算プロパティ: 計算プロパティは依存関係に基づいてキャッシュされ、依存関係が変更された場合にのみ再評価されます。これにより、計算コストが高いシナリオでより効率的になります。

たとえば、フルネームの計算に計算プロパティではなくメソッドを使用した場合、テンプレートがレンダリングされるたびにメソッドが呼び出されます。計算プロパティでは、依存関係の 1 つが変更された場合にのみ再計算されます。

計算プロパティでのゲッターとセッターの使用

計算プロパティには、getterssetter も含めることができます。デフォルトでは、計算プロパティには getter のみが含まれますが、データの更新を処理するために setter を追加できます。

以下は、ゲッターとセッターの両方を持つ計算プロパティの例です。

<template>
  <div>
    <p>Full Name: {{ fullName }}</p>
    <input v-model="fullName" placeholder="Enter your full name" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    };
  },
  computed: {
    fullName: {
      get() {
        return this.firstName + ' ' + this.lastName;
      },
      set(value) {
        const names = value.split(' ');
        this.firstName = names[0];
        this.lastName = names[names.length - 1];
      }
    }
  }
};
</script>

この例では、fullName 計算プロパティには、フルネームを返す getter と、入力された名前を分割して firstName および lastName データ プロパティを更新する setter があります。

計算されたプロパティの反応性

計算プロパティはリアクティブであり、依存関係が変化すると自動的に更新されます。たとえば、firstName または lastName の値を変更すると、fullName 計算プロパティは新しい値を反映して自動的に更新されます。

この反応性を示す例を以下に示します。

<template>
  <div>
    <p>First Name: {{ firstName }}</p>
    <p>Full Name: {{ fullName }}</p>
    <button @click="firstName = 'Jane'">Change First Name to Jane</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    };
  },
  computed: {
    fullName() {
      return this.firstName + ' ' + this.lastName;
    }
  }
};
</script>

この例では、ボタンをクリックすると、firstName が "Jane" に変更され、fullName 計算プロパティが自動的に "Jane Doe" に更新されます。

計算プロパティの使用に関するベストプラクティス

  • 反応型データに依存する高価な計算には計算プロパティを使用します。
  • 計算プロパティはシンプルに保ち、値を返すことに重点を置きます。
  • 計算プロパティ内での副作用を避けてください。アクションを実行する必要がある場合は、代わりにメソッドを使用してください。
  • データの読み取りと書き込みの両方を処理する必要がある場合は、計算プロパティにゲッターとセッターを使用します。
  • 計算プロパティの依存関係がリアクティブであることを確認します。そうでない場合、正しく更新されません。

結論

計算プロパティは、コードをクリーンかつ効率的で、保守しやすい状態に保つことができる Vue.js の強力な機能です。計算プロパティは、他のリアクティブ プロパティからデータを派生させ、依存関係が変わったときに自動的に更新するのに役立ちます。計算プロパティを効果的に使用する方法を理解することで、より堅牢でパフォーマンスの高い Vue.js アプリケーションを構築できます。