【Vue3】watchオプションとは?使い方を紹介する
vuejsのwatchとは
data
やprops
などの値が変更された時に別の処理を実行したいことがあると思います。そんなときにはwatch
オプションを使います。
この記事を書いた人
@takasqr アプリケーション開発が大好きなエンジニア。Vue、Swift、Electrom などでアプリを作って公開している。AWS や Firebase などのクラウドサービスも好き。
watchオプションの使い方
以下のように書いてきます。
<script>
export default {
data () {
return {
task: 'study'
}
},
watch: {
task: {
handler(newValue, oldValue) {
console.log('task changed')
}
}
}
}
</script>
deepオプションで配列やObjectの変更を監視する
配列やオブジェクトをwatch
で監視している場合、Vue3では基本的にまるごと置き換えられたときしか反応しません。
配列やオブジェクトに値を足したり、削るなどの「変更」では、watch
は反応しません。
もし、配列やオブジェクトの値の変更も監視したい場合はdeep
オプションをつける必要があります。
watch: {
todoList: {
handler(newValue, oldValue) {
console.log('todo list changed')
},
deep: true
}
}
immediateオプション
immediateオプションは、監視が開始した直後に一度コールバックが呼び出されるオプションです。
immediateのタイミングでhandler
が呼び出された場合はunwatch
が使えないことに注意してください。
unwatch
は値の監視をやめる関数のことです。
watch: {
task: {
handler(newValue, oldValue) {
console.log('task changed!')
},
immediate: true
}
}
propsをwatchで監視する
watch
オプションではprops
も監視することができます。
<template>
<p>
task: {{ task }}
</p>
</template>
<script>
export default {
props: {
task: String
},
watch: {
task: {
handler(newValue, oldValue) {
console.log('task chenged!')
}
}
}
}
</script>
computedとwatchの使い分け
watch
と似た処理にcomputed
があります。
それぞれ以下のような特徴があります。
computed
はリアクティブな値を加工してtemplete
で表示するのに向いているwatch
は外部APIからデータを取得して表示するようなコストの高い処理を行うのに向いている
公式ではcomputed
で問題ないのであればcomputed
を利用することが推奨されているようです。