textContent
をいじる必要がなくなるref()
や reactive()
を使うと「リアクティブな変数」になるlet count = 0;
const countElement = document.getElementById('count')!;
function increment() {
count += 1;
countElement.textContent = count.toString(); // ← 手で更新しないと変わらない
}
document.getElementById('btn')!.addEventListener('click', increment);
❌ → データ(count)と画面(countElement)がバラバラ。
❌ → 更新忘れるとバグる。
<template>
<p>{{ count }}</p> <!-- ← 自動で更新される -->
<button @click="increment">+</button>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
// count がリアクティブ → 変わると自動で DOM も変わる
const count = ref(0);
const increment = () => {
count.value += 1; // ← これだけでOK
};
</script>
✅ → count.value を変えただけで画面も変わる
✅ → 「勝手に変わる」 = リアクティブデータ
Vue の内部で
ref(0)
→ Proxy(プロキシ)という仕組みで監視