ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
computed とは
Vue.js の computed(算出プロパティ)は、data の値から計算される派生値を宣言的に書く仕組みです。テンプレートに複雑な式を書かずに済み、結果はキャッシュされるため何度参照しても再計算されません。
data との違い
| data | computed | |
|---|---|---|
| 定義 | 値そのもの | 計算ロジックを返す関数 |
| 書き換え | 直接代入 (this.x = 1) | 原則 read-only(setter 定義で write 可) |
| キャッシュ | なし | 依存 data が変わるまでキャッシュ |
| 用途 | UI 状態 / 入力値 | 派生値・計算結果 |
実装例(Options API / Vue 2/3 共通)
value: {{ value }}
computed_value: {{ computedValue }}
doubled: {{ doubled }}
このコードでは value が変わると doubled が再計算されますが、テンプレートで何度 {{ doubled }} を参照しても 1 回しか実行されません。
methods との違い
同じ計算は methods でも書けますが、methods は呼び出すたびに毎回実行されます:
{{ doubledMethod() }}
{{ doubledMethod() }}
{{ doubledComputed }}
{{ doubledComputed }}
| computed | methods | |
|---|---|---|
| 呼び方 | プロパティ {{ x }} | 関数 {{ x() }} |
| キャッシュ | あり(依存が変わるまで) | なし |
| 引数 | 不可 | 可能 |
| 用途 | 派生値の表示 | イベントハンドラ / 引数付き計算 |
setter 付き computed(双方向バインディング)
computed は通常 read-only ですが、setter を定義すれば書き換えも可能:
export default {
data() {
return { firstName: '山田', lastName: '太郎' };
},
computed: {
fullName: {
// 読み取り時
get() {
return this.firstName + ' ' + this.lastName;
},
// 書き込み時
set(newValue) {
const parts = newValue.split(' ');
this.firstName = parts[0];
this.lastName = parts[1] || '';
}
}
}
};
// テンプレート:
// → 入力すると setter が呼ばれて firstName / lastName が更新される
Composition API での書き方(Vue 3)
import { ref, computed } from 'vue';
export default {
setup() {
const value = ref(1);
// computed
const doubled = computed(() => value.value * 2);
// setter 付き
const fullName = computed({
get: () => firstName.value + ' ' + lastName.value,
set: (val) => {
[firstName.value, lastName.value] = val.split(' ');
}
});
return { value, doubled, fullName };
}
};
watch との使い分け
- computed: 「A から B を導く」関係。同期的で、テンプレートでそのまま使う値
- watch: 「A が変わったら副作用を起こす」。非同期処理 / API 呼び出し / DOM 操作などに使う
export default {
data() {
return { keyword: '', results: [] };
},
computed: {
// 純粋な計算(同期)
keywordUpper() { return this.keyword.toUpperCase(); }
},
watch: {
// 副作用がある処理(非同期)
keyword(newVal) {
this.results = [];
this.$axios.get('/api/search?q=' + newVal).then(res => {
this.results = res.data;
});
}
}
};
パフォーマンスを意識する
- computed は依存追跡が自動: 内部で使った data だけが依存になる
- 重い処理に最適: フィルタリング・ソート・集計など
- テンプレートで複雑な式を避ける:
{{ users.filter(...).map(...) }}ではなく computed に切り出す - computed のチェーン: ある computed が別の computed を参照しても OK
- v-for と組み合わせ: ソート済みリストや絞り込み済みリストを computed で返すパターンが王道
よくあるハマりどころ
- computed が更新されない: 配列の push / オブジェクトのプロパティ追加は Vue 2 ではリアクティブにならない →
Vue.set()または Vue 3 で解消 - 非同期処理を入れない: computed は同期で値を返すべき。await を使うなら methods + watch
- this.fullName = 'xxx': setter なしで代入するとエラー(Vue 2)または無視(Vue 3)
- 引数を取りたい: computed は引数を取れない → 関数を返す computed か methods を使う
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- インストール(ファイルのダウンロード)
- npmを使用したプロジェクトの作成(mac)
- for 繰り返し処理
- ifの条件分岐とtemplateを用いたグループ化
- on:click クリック時のイベント処理
- modelとdata フォーム入力値とDOMへの即時反映
- computed(算出プロパティ)と使い方とdataとの違い
- ライフサイクルフック(created / mounted / updated / destroyedの使い方)
- $nextTickの使い方(ライフサイクルフック)
- メソッドの定義方法
- エラー一覧
- ルーティング設定
- aリンクの貼り方と動的URLの作成
- Mixinを利用した共通処理の記述方法
- v-bindによるデータ連携
- ヘッダー/フッターの共通コンポーネント
- ナビゲーションの現在ページをハイライトする方法
- 画面サイズの取得方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- SEO タイトル設計とキーワード配置完全ガイド (CTR / LLMO 対応) 2026-06-10 18:13:56
- Vue.js v-bind 完全ガイド (属性 / クラス / スタイル / Composition API) 2026-06-10 18:13:56
- Twitter (X) プラットフォーム完全ガイド 2026 (API / Premium / 競合) 2026-06-10 18:13:56
- PHP 変数スコープ完全ガイド (global / static / use / Arrow Function) 2026-06-10 18:13:56
- jQuery .height() 完全ガイド (innerHeight / outerHeight / box-sizing) 2026-06-10 18:13:56
- WordPress 主要独自関数完全ガイド (Loop / Enqueue / Hook / Conditional Tag) 2026-06-10 18:13:56
- jQuery 要素・値の削除完全ガイド (remove / detach / empty / val) 2026-06-10 18:13:56
- PHP コメント完全ガイド (// / # / /* */ / PHPDoc) 2026-06-10 18:13:56
- PHP 改行出力 (\n / PHP_EOL / nl2br) 完全ガイド 2026-06-10 18:13:56
- JavaScript 確認ダイアログ完全ガイド (confirm / alert / prompt / dialog) 2026-06-10 18:13:56
- UE5 スクリーンショット保存 (Scene Capture) 完全ガイド 2026-06-10 18:12:53
- UE5 Nav Mesh Bounds Volume 完全ガイド 2026-06-10 18:12:53
- EJS テンプレートの共通化 (include) 完全ガイド 2026-06-10 18:12:53
- UE5 カメラ傾き角度制限完全ガイド (Pitch Min/Max) 2026-06-10 18:12:53
- SQLite 完全ガイド (組み込み RDBMS) 2026-06-10 18:12:53
コメントを削除してもよろしいでしょうか?