当前位置:   article > 正文

vue3 中的 computed 和 watch 的使用_vue3 watch computed

vue3 watch computed

computed 函数

  1. import { computed , reactive } from 'vue';
  2. setup(){
  3. const person = reactive({
  4. firstName : '张'
  5. lastName : '三'
  6. })
  7. // 计算属性 --- 简写
  8. const fullName1 = computed(()=>{
  9. return person.firstName + '-' + person.lastName
  10. })
  11. // 计算属性 ---完整写法
  12. const fullName2 = computed(()=>{
  13. get(){
  14. return person.firstName + '-' + person.lastName
  15. },
  16. set(value){
  17. const nameArr = value.spilt('-')
  18. person.firstName = nameArr[0]
  19. person.lastName = nameArr[1]
  20. }
  21. })
  22. }

watch函数

注意:两个”坑“

  • 监视 reactive 定义的响应式数据时:oldValue 无法正确获取、强制开启了深度监视(deep配置失效)
  • 监视reactive 定义的响应式数据中某一个属性时:deep配置有效

情况一:监视 ref 定义的响应式数据

  1. watch( sum , ( newValue , oldValue ) => {
  2. console.log('sum变化了',newValue,oldValue)
  3. },{ immediate : true })

情况二:监视多个 ref 定义的响应式数据

  1. watch([sum , msg],(newValue , oldValue)=>{
  2. console.log('sum 或 msg 变化了',newValue,oldValue); // 这里的 newValue,oldValue 以数组的形式输出
  3. })

情况三:监视 reactive 定义的响应式数据

  • watch 监视得是 reactive 定义的响应式数据,则无法正确获得 oldValue!!!!
  • watch监视得是 reactive 定义的响应式数据,则强制开启了深度监视
  1. const person = {
  2. name:'小明',
  3. age:18,
  4. job:{
  5. salary:1234
  6. }
  7. }
  8. watch(person,(newValue , oldValue)=>{
  9. console.log('person 变化了',newValue,oldValue)
  10. },{ immediate : true, deep : false}) // 此处的 deep 配置不再奏效

情况四:监视 reactive 定义的响应式数据中的某一个属性

  1. const person = {
  2. name:'小明',
  3. age:18,
  4. job:{
  5. salary:1234
  6. }
  7. }
  8. watch(()=>person.job,(newValue,oldValue)=>{
  9. console.log('person 的 job变化了',newValue,oldValue)
  10. },{immdiate:true,deep:teue})

情况五:监视 reactive 定义的响应式数据中的某些数据

  1. const person = {
  2. name:'小明',
  3. age:18,
  4. job:{
  5. salary:1234
  6. }
  7. }
  8. watch([()=>person.job,()=>person.name],(newValue,oldValue)=>{
  9. console.log('person 的 job 或 name 变化了', newValue , oldValue)
  10. },{immdiate:true,deep:true})

特殊情况

  1. watch(()=>person.job,(newValue,oldValue)=>{
  2. console.log('person 的 job 变化了',newValue,oldValue)
  3. },{deep:true}) // 此处由于监视的是 reactive 定义的对象中某一个属性,所以 deep 配置有效

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/318668
推荐阅读