• vue3中watch的用法


    一、vue2中watch的用法

     watch属性中,监听sum值的变化

            immediate:true,表示立即监听(页面一加载就能触发);

            deep:true,表示开启深度监听

    1. watch: {
    2. sum: {
    3. handler(newValue, oldValue) {
    4. console.log('sum的值变化了', newValue, oldValue);
    5. },
    6. immediate: true,
    7. deep: true
    8. }
    9. },
    1. <template>
    2. <div class="about">
    3. <div>当前值为:{{ sum }}div>
    4. <button @click="sum++">加一button>
    5. div>
    6. template>
    7. <script>
    8. import { ref } from 'vue';
    9. export default {
    10. name:'aboutPage',
    11. watch: {
    12. sum: {
    13. handler(newValue, oldValue) {
    14. console.log('sum的值变化了', newValue, oldValue);
    15. },
    16. immediate: true,
    17. deep: true
    18. }
    19. },
    20. setup() {
    21. let sum = ref(0)
    22. return {
    23. sum
    24. }
    25. }
    26. }
    27. script>

     浏览器控制台输出:

    一、vue3中watch的用法 

    vue3中的watch为组合式Api中的一个函数。

    vue2的watch只能写一个,vue3中可以写多个watch函数,当watch同时监听多个响应式数据时,需要放进一个数组中

    (1)监听 ref 定义的响应式数据

    情况一:监视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或sum变化了', newValue, oldValue);
    3. }, {immediate: true})

    (1)监听 reactive 定义的响应式数据 

    缺点:

            1、无法正确获取oldValue
            2、强制开启深度监听,deep配置无效

    情况三:监听reactive定义的一个响应式数

    1. watch(person, (newValue, oldValue) => {
    2. console.log('person改变了', newValue, oldValue);
    3. })

    情况四:监听reactive定义的一个响应式数据中的某个属性(监听属性需要写成函数形式)

    1. watch(()=>person.name, (newValue, oldValue) => {
    2. console.log('person的name改变了', newValue, oldValue);
    3. })

    情况五:监听reactive定义的一个响应式数据中的多个属性(监听属性需要写成数组包函数形式)

    1. watch([()=>person.name, ()=>person.age], (newValue, oldValue) => {
    2. console.log('person的name或age改变了', newValue, oldValue);
    3. })

    情况六:监听reactive定义的一个响应式数据中深层次的一个属性(特殊情况)

    1. watch(()=>person.job, (newValue, oldValue) => {
    2. // 页面上修改的其实是job下的j1下的salary属性值, 需要开启深度监听才能触发
    3. console.log('person的job改变了', newValue, oldValue);
    4. }, {deep: true})

    ps:如果对象是ref定义的,监听整个对象时需要写成person.value的形式,或者开启深度监听。

  • 相关阅读:
    推荐一个屏幕上鼠标高亮显示的小工具
    计算机毕业设计(附源码)python重工教师职称管理系统
    【万字长文】Java面试八股文:深入剖析常见问题与解答
    Pytorch学习 day12(模型的保存和加载)
    5分钟教会你如何在生产环境debug代码
    CanvasScaler计算方法
    系统架构师备考倒计时24天(每日知识点)
    MySQL select count(*)计数很慢,有没有优化方案?
    卷积神经网络及YOLO算法 相关
    第十三章总结
  • 原文地址:https://blog.csdn.net/weixin_46058007/article/details/133944181