### ==第一種情況 - ref 基本型別監聽 + 結束監聽== ```javascript= <template> {{ sum }} <button type="button" @click="sum += 1">增加</button> </template> <script> let sum = ref(0) const a = watch(sum, (newVal) => { console.log(newVal) if (newVal > 10) { a() }}) </script> ``` ### ==第二種情況 - ref 物件型別監聽== ```javascript= <template> {{ person.name }} {{ person.age }} <button type="button" @click="person.name += '1'">增加名字</button> <button type="button" @click="person.age += 1">增加年齡</button> <button type="button" @click="person = { name: '柯基2號', age: 27 }">修改整個person</button> </template> <script> let person = ref({ name: '柯基', age: 25 }) watch( () => person.value.name, (newVal, oldVal) => { console.log('改變', newVal, oldVal) } ) </script> ``` ### ==第三種情況 - reactive 監聽== ```javascript= <template> </template> <script> </script> ``` ### ==第四種情況 - ref 或 reactive 物件型別中的某個屬性監聽,一律使用()=>,如果屬性是物件,可以搭配deep配置== ```javascript= <template> {{ person2.name }} {{ person2.age }} {{ person2.like.a }} {{ person2.like.b }} <button type="button" @click="person2.name += '1'">修改名字</button> <button type="button" @click="person2.age += 1">修改年齡</button> <button type="button" @click="person2.like.a += '~'">修改like物件a</button> <button type="button" @click="person2.like.b += '+'">修改like物件b</button> <button type="button" @click="person2.like = { a: '葡萄', b: '芒果' }">改變like</button> </template> <script> let person2 = reactive({ name: '柯基', age: 23, like: { a: '蘋果', b: '香蕉' } }) watch(person2.like, (newVal, oldVal) => console.log(newVal, oldVal)) </script> ``` ### ==第五種情況 - 多值監聽== ```javascript= <template> {{ person3 }} <button type="button" @click="person3.name = '柯基二號'">改變名字</button> <button type="button" @click="person3.age -= 1">改變年齡</button> </template> <script> let person3 = ref({ name: '柯基', age: 25 }) watch([() => person3.value.name, () => person3.value.age], (newVal, oldVal) => console.log(newVal, oldVal)) </script> ```