Vue 2.7 では
クラスコンポーネント(OOP: オブジェクト指向的)
Composition API(関数的、宣言的)
の両方が使えるが、考え方とコード構造が大きく異なる。
→ クラスは「this でまとめる」
→ Composition API は「必要な変数や関数を ref
や computed
で宣言する」
<!-- Counter.vue -->
<template>
<div>
<p>{{ count }}</p>
<button @click="increment">+</button>
</div>
</template>
<script lang="ts">
import { Vue, Component } from 'vue-property-decorator';
@Component
export default class Counter extends Vue {
count: number = 0;
increment(): void {
this.count += 1;
}
}
</script>
<!-- Counter.vue -->
<template>
<div>
<p>{{ count }}</p>
<button @click="increment">+</button>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
const count = ref(0);
const increment = () => {
count.value += 1;
};
</script>
クラスコンポーネント | Composition API | |
---|---|---|
構文 | クラス(class ) + デコレーター |
ref , reactive , computed , watch |
データ | クラスのプロパティ | ref や reactive |
メソッド | クラスのメソッド | 関数として setup 内に宣言 |
computed | get で getter を作成 |
computed 関数で定義 |
Vuex との連携 | this.$store |
useStore() |
ロジックの再利用 | mixin | composable 関数 (useXXX ) |
型安全 | Decorator による型付け(部分的) | ref<number>() など明示的 |
Vue 3 互換 | △(非推奨になりつつある) | ◎(Vue 3 完全対応) |