はじめに
Vue 3 では新しい Composition API が導入され、より柔軟で再利用しやすいコードを書くことができるようになりました。本記事では、Vue 2 の Options API との違いや、Composition API の基本的な使い方、実践例について解説します。
Vue 2 と Vue 3 の違い
Vue 2 の Options API と Vue 3 の Composition API の違い
Vue 2 では Options API を使用し、data, methods, computed, watch などを分けて記述していました。
Vue 2 の Options API の例
export default {
data() {
return {
count: 0
};
},
methods: {
increment() {
this.count++;
}
}
};
Vue 3 では Composition API を導入し、setup() 関数内でロジックをまとめて記述できます。
Vue 3 の Composition API の例
<script setup>
import { ref } from 'vue';
const count = ref(0);
const increment = () => {
count.value++;
};
</script>
Composition API を導入するメリット
- ロジックをまとめて記述できるため、可読性が向上
- コードの再利用がしやすく、複数のコンポーネントで同じロジックを簡単に使い回せる
- TypeScript との相性が良く、型のサポートが強化されている
Vue 3 での開発の基本的な流れ
- Vue 3 プロジェクトの作成 (
create-vueまたはviteを使用) - setup() 関数を活用してデータや関数を管理
- ライフサイクルフックやリアクティブな状態管理を組み込む
setup() 関数の使い方
setup() 関数の基本構造と役割
setup()は Vue コンポーネントの 最初に実行される関数 で、データや関数を定義する役割を持ちます。thisを使用せずにデータを扱える のが特徴。
基本の setup() の構造
<script setup>
import { ref } from 'vue';
const message = ref('Hello Vue 3');
</script>
<template>
<p>{{ message }}</p>
</template>
setup() でデータを管理する方法(ref() や reactive() の活用)
ref() と reactive() を使用して、リアクティブなデータを管理できます。
リアクティブとはVue では、データが変更されたときに 自動的に UI(画面)を更新 する仕組みです。これにより、手動で DOM を更新する必要がなくなり、より直感的な開発が可能になります
ref() の例(単一の値をリアクティブにする)
<script setup>
import { ref } from 'vue';
const count = ref(0);
</script>
reactive() の例(オブジェクトや配列をリアクティブにする)
<script setup>
import { reactive } from 'vue';
const user = reactive({
name: 'Taro',
age: 25
});
</script>
setup() 内で computed() や watch() を使う方法
Vue 3 の computed() と watch() はどちらもリアクティブデータを使いますが、役割や動作の仕組みが異なります。
computed() を使った動的なデータ処理
<script setup>
import { ref, computed } from 'vue';
const price = ref(1000); // 商品の価格
const taxRate = ref(0.1); // 税率(10%)
const totalPrice = computed(() => price.value * (1 + taxRate.value)); // 税込み価格を計算
</script>
<template>
<div>
<p>商品価格: {{ price }} 円</p>
<p>税込価格: {{ totalPrice }} 円</p>
</div>
</template>
仕組みの詳細
priceやtaxRateが変更されると、自動的にtotalPriceが再計算されるtotalPriceの値がキャッシュされ、依存データ (priceやtaxRate) が変わらない限り無駄な再計算が行われない- テンプレート内では
totalPriceを通常の変数のように扱える
watch() を使った動的なデータ処理
watch() は、指定したリアクティブなデータの変更を 監視(ウォッチ) し、その変更に応じて特定の処理を実行するのに使われます。
たとえば、API の再取得や、特定の処理をデータの変更に応じて実行する 場合に便利です。
watch() の基本的な使い方
<script setup>
import { ref, watch } from 'vue';
const count = ref(0);
watch(count, (newVal, oldVal) => {
console.log(`count が ${oldVal} から ${newVal} に変更されました`);
});
</script>
<template>
<div>
<p>カウント: {{ count }}</p>
<button @click="count++">増やす</button>
</div>
</template>
watch() の仕組み
countの値が変更されるたびにwatch()のコールバック関数が実行される。watch(count, (newVal, oldVal) => {...})の第1引数newValには新しい値、第2引数oldValには変更前の値が入る。- ボタンをクリックすると
countの値が増え、コンソールに変更が表示される。
computed()とwatch()の違い
| computed() | watch() | |
|---|---|---|
| 主な用途 | 動的な計算結果を作成 | データの変更を検知して処理を実行 |
| キャッシュ | あり(無駄な計算を防ぐ) | なし(変更のたびに実行) |
| テンプレート内で直接使えるか | 使える | 使えない(関数として処理を実行) |
| 実行タイミング | 依存データが変更されたときのみ再計算 | データ変更をトリガーに毎回実行 |
| 具体的な用途 | 価格計算、フィルタリング、合計値など | API の再取得、ローカルストレージ更新、ログ記録など |
ref() と reactive() を使った状態管理
ref() を使った単純なリアクティブデータの管理
<script setup>
import { ref } from 'vue';
const message = ref('Hello Vue 3');
</script>
reactive() を使ってオブジェクトや配列をリアクティブにする方法
<script setup>
import { reactive } from 'vue';
const user = reactive({ name: 'Taro', age: 25 });
</script>
ref() と reactive() の違いと使い分け
ref()→ 単一の値に適用(数値・文字列・真偽値など)reactive()→ オブジェクトや配列に適用
Composition API の実践例
カウンターアプリを作成して ref() を使った状態管理を体験する
<script setup>
import { ref } from 'vue';
const count = ref(0);
const increment = () => {
count.value++;
};
</script>
<template>
<button @click="increment">カウント: {{ count }}</button>
</template>
フォーム入力のバインディングと reactive() を使った状態管理の例
<script setup>
import { reactive } from 'vue';
const form = reactive({ name: '', email: '' });
</script>
<template>
<input v-model="form.name" placeholder="名前を入力" />
<input v-model="form.email" placeholder="メールアドレスを入力" />
<p>名前: {{ form.name }}</p>
<p>メール: {{ form.email }}</p>
</template>
まとめ
- Vue 3 の Composition API は、より柔軟で再利用しやすいコードを実現する
- setup() 内で
ref()やreactive()を使い、リアクティブなデータを管理できる computed()はキャッシュされる計算プロパティ、watch()はデータ変更時に処理を実行するために使う- Composition API を活用すると、コードの可読性・再利用性が向上し、大規模なアプリ開発にも適している
Composition API を活用し、よりモダンで効率的な Vue 3 の開発を始めましょう!


コメント