Vue.jsのcomputedプロパティは、データに依存した値をリアクティブに計算し、テンプレート内で効率的に表示するための機能です。フォームの入力に応じた表示内容の変化や、配列のフィルタリングなどで頻繁に利用されます。
computedプロパティの基本的な使い方
Vue.jsにおけるcomputed
プロパティは、テンプレート内で使われる計算済みの値を定義するための機能です。通常のデータとは異なり、他のデータに依存して値を自動的に計算し、依存元のデータが変更されたときにだけ再評価されます。
以下は、firstName
とlastName
という2つのデータプロパティを結合してfullName
を算出する基本的な例です。
export default {
data() {
return {
firstName: 'John',
lastName: 'Doe'
};
},
computed: {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
}
上記のコードでは、computed
オプション内にfullName
というプロパティを定義しています。このプロパティはfirstName
またはlastName
が変更されたときにのみ再計算され、その他の操作ではキャッシュされた値が使用されます。
このように、computedプロパティを活用することで、テンプレートをシンプルに保ちつつ、複雑な表示ロジックをロジック層に切り分けることが可能になります。
methodsとの違いと使い分け
computed
プロパティと似た機能としてmethods
がありますが、両者には重要な違いがあります。どちらもテンプレート内で関数のように使用できますが、再評価のタイミングに大きな差があります。
computedプロパティは、そのプロパティが依存しているデータが変更されたときのみ再評価され、それ以外のタイミングではキャッシュされた値が返されます。これにより、パフォーマンスの最適化が図れます。
一方、methodsは呼び出されるたびに関数が実行されるため、同じ値を返す処理でも毎回再評価が発生します。
以下のコードは、number1
とnumber2
の合計をcomputed
とmethods
の両方で実装した例です。
export default {
data() {
return {
number1: 10,
number2: 20
};
},
computed: {
sum() {
return this.number1 + this.number2;
}
},
methods: {
calculateSum() {
return this.number1 + this.number2;
}
}
}
この例では、sum
はnumber1
またはnumber2
が変わらない限り再評価されません。一方、calculateSum()
はテンプレート内で使用するたびに再実行されます。
この違いにより、テンプレート内で頻繁に呼び出される計算処理や、依存データに基づいた表示用の値にはcomputed
が推奨されます。逆に、クリックイベントなどのユーザーアクションに応じて処理を実行したい場合はmethods
を使うとよいでしょう。
Setterを持つcomputedの活用方法
computed
プロパティは通常、読み取り専用のgetter
として使用されますが、必要に応じてsetter
も定義することができます。これにより、双方向バインディングが可能となり、ユーザーの入力などに応じて内部のデータを自動的に更新できるようになります。
以下は、firstName
とlastName
という2つのデータをまとめて操作できるfullName
プロパティをgetter
とsetter
で構成した例です。
export default {
data() {
return {
firstName: 'John',
lastName: 'Doe'
};
},
computed: {
fullName: {
get() {
return `${this.firstName} ${this.lastName}`;
},
set(newValue) {
const names = newValue.split(' ');
this.firstName = names[0] || '';
this.lastName = names[1] || '';
}
}
}
}
このコードでは、fullName
を通じてfirstName
とlastName
の両方をまとめて取得・更新することができます。v-model
を使ってフォーム入力と連携させることで、ユーザーがfullName
を入力すると、自動的にfirstName
とlastName
に分割されて保存される仕組みになります。
このような構造は、入力フォームやプロフィール編集画面など、1つのフィールドで複数の内部データを操作したい場面において特に有効です。getter
とsetter
を組み合わせることで、データ整合性を保ちながら柔軟な入力処理が可能になります。
まとめ|computedの活用で効率的なVue開発を
computed
プロパティは、Vue.jsにおけるリアクティブなデータ処理の中心的な機能です。テンプレート内で複雑な処理を直接書くことなく、依存関係に基づいた値の自動計算を実現できます。
本記事では以下の点を解説しました:
- 基本的な使い方: 複数のデータから新たなプロパティを導出し、テンプレートに反映
- methodsとの違い: キャッシュの有無によるパフォーマンス差と使い分けのポイント
- Setterの活用: フォーム入力など双方向データバインディングへの応用
computed
を適切に使うことで、コードの再利用性・保守性・可読性が向上し、パフォーマンスにも優れたアプリケーションが構築できます。特にテンプレート内で同じ処理を繰り返している場合は、computedに切り出すことでロジックの整理と高速化を同時に実現できます。
今後、Vue.jsでより複雑なUIを構築していく際には、computedを積極的に活用し、データの流れを明確に保つ設計を心がけましょう。