• 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的形式,或者开启深度监听。

  • 相关阅读:
    Mask R-CNN复现报错无法解决
    HDFS节点的分类与作用
    EasyCVR服务private.pem文件被清空,导致无法正常启动该如何处理?
    C++学习 --list
    洛谷千题详解 | P1011 [NOIP1998 提高组] 车站【C++、Java、Pascal语言】
    彻底解决JDK安装包点击后无反应
    Mysql-SQL优化
    Qt编译出错ERROR: Unknown module(s) in QT: script
    ping: mirrors.aliyun.com: Temporary failure in name resolution
    Docker入门尝鲜
  • 原文地址:https://blog.csdn.net/weixin_46058007/article/details/133944181