watch和watchEffect的用法

watch和watchEffect都是监听器,但在写法和使用上有所区别。
watch在监听 ref 类型时和监听reactive类型时watch函数的写发有所不一样。
watch在监听 ref 类型时:

import {ref, watch} from 'vue'
export default {
    setup() { 
        const state = ref(0)
        watch(state, (newValue, oldValue) => {
          console.log(`原值为${oldValue}`)
          console.log(`新值为${newValue}`)
          /* 1秒后打印结果:
                  原值为0
                  新值为1
          */
        })

        // 1秒后将state值+1
        setTimeout(() => {
          state.value ++
        }, 1000)
    }
}

watch在监听 reactive类型时:

import {reactive, watch} from 'vue'
export default {
    setup() { 
        const state = reactive({count: 0})

        watch(() => state.count, (newValue, oldValue) => {
          console.log(`原值为${oldValue}`)
          console.log(`新值为${newValue}`)
          /* 1秒后打印结果:
                  原值为0
                  新值为1
          */
        })

        // 1秒后将state.count的值+1
        setTimeout(() => {
          state.count ++
        }, 1000)
    }
}

watchEffect 它与 watch 的区别主要有以下几点:
1.不需要手动传入依赖
2.每次初始化时会执行一次回调函数来自动获取依赖
3.无法获取到原值,只能得到变化后的值

import {reactive, watchEffect} from 'vue'
export default {
    setup() { 
          const state = reactive({ count: 0, name: 'zs' })

          watchEffect(() => {
          console.log(state.count)
          console.log(state.name)
          /*  初始化时打印:
                  0
                  zs

            1秒后打印:
                  1
                  ls
          */
          })

          setTimeout(() => {
            state.count ++
            state.name = 'ls'
          }, 1000)
    }
}

watch和watchEffect监听器在同一个页面中都可以使用多次,对于分别监听多个变量的时候


 上一篇
vue3使用路由 vue3使用路由
下载 npm install vue-router@4 配置路由 暴露出一个createRouter方法,用来创建路由对象 通过defineAsyncComponent方法来实现路由的懒加载 import { defineAsy
下一篇 
toRef函数和toRefs函数 toRef函数和toRefs函数
我们知道ref可以用于创建一个响应式数据,而toRef也可以创建一个响应式数据,那他们之间有什么区别呢? 事实上,如果利用ref函数将某个对象中的属性变成响应式数据,修改响应式数据是不会影响到原始数据。 import {ref} from
2021-05-18
  目录