Vue 3でプロップス監視
Vue 3 Composition APIでプロップスの変更を監視する方法の説明 (日本語)
Vue 3のComposition APIは、より柔軟で再利用可能なコードを書くための新しいAPIを提供します。その中で、プロップスの変更を監視する方法は、従来のVue 2のwatch
オプションとは異なり、watchEffect
やwatch
関数を使用します。
watchEffect
の使用
watchEffect
は、リアクティブな値が変更されたときに実行される関数を提供します。プロップスの変更を監視するには、watchEffect
の中でプロップスの値を参照します。
<template>
<div>
<input v-model="name" />
<p>{{ greeting }}</p>
</div>
</template>
<script>
import { ref, watchEffect } from 'vue';
export default {
setup() {
const name = ref('');
const greeting = ref('');
watchEffect(() => {
greeting.value = `Hello, ${name.value}!`;
});
return {
name,
greeting,
};
},
};
</script>
watch
の使用
watch
は、特定の値を監視し、その値が変更されたときに実行されるコールバック関数を提供します。プロップスの変更を監視するには、watch
の第1引数に監視するプロップスを、第2引数にコールバック関数を渡します。
<template>
<div>
<input v-model="name" />
<p>{{ greeting }}</p>
</div>
</template>
<script>
import { ref, watch } from 'vue';
export default {
setup() {
const name = ref('');
const greeting = ref('');
watch(name, (newName) => {
greeting.value = `Hello, ${newName}!`;
});
return {
name,
greeting,
};
},
};
</script>
どちらの方法を使用するかは、監視する値の数や、監視する値が依存する他の値の複雑さに依存します。
<template>
<div>
<input v-model="name" />
<p>{{ greeting }}</p>
</div>
</template>
<script>
import { ref, watchEffect } from 'vue';
export default {
setup() {
const name = ref('');
const greeting = ref('');
watchEffect(() => {
greeting.value = `Hello, ${name.value}!`;
});
return {
name,
greeting,
};
},
};
</script>
watchEffect
の中で、name
の値を参照し、greeting
の値を更新します。greeting
は、挨拶メッセージを保持するリアクティブな変数です。name
は、入力フィールドの値を保持するリアクティブな変数です。watchEffect
は、リアクティブな値が変更されたときに実行される関数を提供します。
<template>
<div>
<input v-model="name" />
<p>{{ greeting }}</p>
</div>
</template>
<script>
import { ref, watch } from 'vue';
export default {
setup() {
const name = ref('');
const greeting = ref('');
watch(name, (newName) => {
greeting.value = `Hello, ${newName}!`;
});
return {
name,
greeting,
};
},
};
</script>
- コールバック関数の中で、
name
の新しい値(newName
)を使用してgreeting
の値を更新します。 watch
の第1引数に監視するプロップス(name
)を、第2引数にコールバック関数を渡します。watch
は、特定の値を監視し、その値が変更されたときに実行されるコールバック関数を提供します。
computed
プロパティの使用
computed
プロパティは、依存する値が変更されたときに自動的に再計算される値を提供します。プロップスの変更を監視し、それに基づいて計算された値を更新するには、computed
プロパティを使用できます。
<template>
<div>
<input v-model="name" />
<p>{{ greeting }}</p>
</div>
</template>
<script>
import { ref, computed } from 'vue';
export default {
setup() {
const name = ref('');
const greeting = computed(() => {
return `Hello, ${name.value}!`;
});
return {
name,
greeting,
};
},
};
</script>
toRef
とwatch
の使用
toRef
は、リアクティブなオブジェクトからリアクティブな参照を作成します。toRef
を使用してプロップスの参照を作成し、watch
でその参照を監視することができます。
<template>
<div>
<input v-model="name" />
<p>{{ greeting }}</p>
</div>
</template>
<script>
import { ref, toRef, watch } from 'vue';
export default {
setup(props) {
const nameRef = toRef(props, 'name');
watch(nameRef, (newName) => {
// ここでgreetingを更新する
});
return {
// ...
};
},
};
</script>
これらの代替方法を使用するかどうかは、プロップスの変更を監視する目的や、コードの構造や読みやすさに依存します。
toRef
とwatch
は、プロップスの参照を直接監視し、より柔軟な制御が必要な場合に適しています。computed
プロパティは、プロップスの変更に基づいて計算された値を簡単に更新したい場合に適しています。
javascript typescript vue.js