本地化吃喝玩乐平台网站可以做吗,深入了解网站建设,wordpress果酱,中心网站建设Vue3-ref、reactive函数的watch
ref函数的watch
原理#xff1a;监视某个属性的变化。当被监视的属性一旦发生改变时#xff0c;执行某段代码。watch 属性中的数据需要具有响应式watch 属性可以使用箭头函数watch 属性可以监视一个或者多个响应式数据#xff0c;并且可以配…Vue3-ref、reactive函数的watch
ref函数的watch
原理监视某个属性的变化。当被监视的属性一旦发生改变时执行某段代码。watch 属性中的数据需要具有响应式watch 属性可以使用箭头函数watch 属性可以监视一个或者多个响应式数据并且可以配置 immediate(立即执行) 和 deep(深度侦听)搭配使用
// 监视一个响应式数据
watch(监视的数据, (newValue, oldValue) { ... }, {immediate : true, deep : true})// 监视多个响应式数据
// 第一种 有多少个监视数据就写多少个watch
watch(监视的数据1, (newValue, oldValue) { ... }, {immediate : true, deep : true})
watch(监视的数据2, (newValue, oldValue) { ... }, {immediate : true, deep : true})// 第二种 数组形式
watch([监视的数据1, 监视的数据2], (newValue, oldValue) { ... }, {immediate : true, deep : true})// App.vue
templateh2计数器1{{counter1}}/h2h2计数器2{{counter2}}/h2button clickcounter1计数器1加1/buttonbrbutton clickcounter2计数器2加1/button
/templatescriptimport { watch, ref } from vueexport default {namme : App,setup(){let counter1 ref(1)let counter2 ref(100)watch(counter1, (newValue, oldValue) {console.log(计数器1, newValue, oldValue);})watch(counter2, (newValue, oldValue) {console.log(计数器2, newValue, oldValue);})// 采用数组的方式一次性监视多个属性watch([counter1, counter2], (newValue, oldValue) {console.log(newValue, oldValue);})return {counter, counter2}}}
/scriptreactive函数的watch
reactive函数在 watch 属性中的注意事项 当watch中的侦听数据是reactive函数的一个对象时 在watch中是无法获取到oldValue的只能获取到newValue。在没使用箭头函数的基础上watch 属性默认开启deep(深度侦听)的并且deep无法被取消即便是在watch 属性的末尾加上 {deep : false} 也没有用。使用箭头函数调用对象虽然无法获取oldValue但是deep设置有效 当watch中的侦听数据是reactive函数的是基本数据类型时 在watch中侦听基本数据类型需要使用箭头函数使用箭头函数调用基本数据类型才能获取到oldValue watch 属性可以监视一个或者多个响应式数据
// 监视一个对象
// 不使用箭头函数deep设置无效oldValue获取不到
watch(对象, (newValue, oldValue) { ... }, {immediate : true})// 使用箭头函数oldValue获取不到deep设置有效
watch(() 对象, (newValue, oldValue) { ... }, {immediate : true, deep : false})// 监视一个基本数据类型 使用箭头函数获取到oldValue
watch(() 基本数据类型, (newValue, oldValue) { ... })// 监视多个 数组形式使用箭头函数获取到oldValue
watch([() 基本数据类型, () 基本数据类型], (newValue, oldValue) { ... })// App.vue
templateh2计数器1{{data.counter1}}/h2h2计数器2{{data.a.counter2}}/h2button clickdata.counter1计数器1加1/buttonbrbutton clickdata.a.counter2计数器2加1/button
/templatescriptimport { reactive, watch } from vueexport default {name : App,setup(){let data reactive({counter1 : 1,a : {counter2 : 100}})// data是一整个对象oldValue是拿不到的默认开启deepdeep设置无效watch(data, (newValue, oldValue) {console.log(newValue, oldValue);}, {deep : false})// data.counter1是一个基本数据类型可以获取到oldValuewatch(() data.counter1, (newValue, oldValue) {console.log(newValue, oldValue);})// data.a是一个对象deep设置有效oldValue无法获取watch(() data.a, (newValue, oldValue) {console.log(newValue, oldValue);}, {deep : false})// data.a.counter2是基本数据类型可以获取oldValuewatch(() data.a.counter2, (newValue, oldValue) {console.log(newValue, oldValue);})// data.counter1 和 data.a.counter2是基本数据类型数组形式可以获取oldValuewatch([() data.counter1, () data.a.counter2], (newValue, oldValue) {console.log(newValue, oldValue);})return {data}}}
/script