码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • vue2.x版本中computed和watch的使用入门详解-关联和区别


    前面两篇介绍了computed和watch的基本使用

    • watch篇
    • computed篇

    两者的区别,继续通过代码实现的方式具体去了解

    html

    <li>最开始的value值:{{ name }}</li>
    <li>computed计算后的值:{{ computedName }}</li>
    <li>
    	watch修改后的值:{{ watchName }}
    	<input type="text" v-model="watchName" />
    </li>
    <li><button @click="handleNumber">修改名字</button></li>
    

    JS

    data() {
    	return {
    		name: "zhangsan",
    		watchName: "张三",
    	};
    },
    watch: {
    	watchName(newVal, oldVal) {
    		console.log("旧的值---->", newVal);
    		console.log("新的值---->", oldVal);
    		console.log("watch下所有的状态都会监听this.name---->", this.name);
    		console.log(
    			"watch下所有的状态都会监听this.computedName---->",
    			this.computedName
    		);
    		this.watchName = newVal;
    	},
    },
    computed: {
    	computedName: function (currentThis) {
    		console.log(
    			"和计算属性无关的状态发生更改时,不会执行,只要依赖的状态发生更改,缓存才会更新",
    			currentThis
    		);
    		return `依赖于name,:${this.name}`;
    	},
    },
    methods: {
    	handleNumber() {
    		this.name = "lisi";
    	},
    },
    

    区别

    依赖值: computed依赖于所使用的状态,类似在data中声明的name,
    而watch中监听的值不依赖于某个值,只要组件状态发生更改,监听的值就实时获取最新值,
    computed的实现使用的是getter和setter获取值,属于同步操作。

    使用方法:

    • computed最后需要进行return处理返回值,并且可以使用更深层次的getter和setter,具体参考computed篇
    • watch除了callback回调函数外,还有两个属性值为布尔值的属性,用于首次绑定immediate,以及对对象的深度监听deep
    • 两者相同点就是可以通过方法参数获取新值,结合其他状态处理相关的业务

    **补充##

    在官方文档中,除了在组件中使用的watch外,官方文档中,还有对于示例中watch的介绍

    具体用法可以在官网中:

    https://cn.vuejs.org/v2/api/#vm-watch

    $watch基础使用--来自官方文档例子

    官方文档提示:

    注意:在变更 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变更之前值的副本。

    vm.$watch('a.b.c', function (newVal, oldVal) {
      // 做点什么
    })
    
    // 函数
    vm.$watch(
      function () {
        // 表达式 `this.a + this.b` 每次得出一个不同的结果时
        // 处理函数都会被调用。
        // 这就像监听一个未被定义的计算属性
        return this.a + this.b
      },
      function (newVal, oldVal) {
        // 做点什么
      }
    )
    
    
    

    需要注意的是,如果使用vm.$watch,那么使用unwatch有助于我们取消对某个状态的监听,减少不必要的监听和交互开销

    var unwatch = vm.$watch('a', cb)
    // 之后取消观察
    unwatch()
    

    结尾

    • watch篇
    • computed篇

    花了三个篇幅去介绍watch和computed的使用方法,以及这两个钩子函数的区别,在实际的企业项目开发中,使用的场景和次数较多,所以尽量写的稍微详细一些,同时也将笔记的代码放在了开源仓库,希望对大家在开发vue2.x的项目中有所帮助

    • 码云 https://gitee.com/lewyon/vue-note
    • githup https://github.com/akari16/vue-note

    文章个人博客地址:vue2.x版本中computed和watch的使用入门详解-关联和区别

    欢迎关注公众号:程序猿布欧,不定期更新一些前端入门文章

    创作不易,转载请注明出处和作者。

  • 相关阅读:
    Python---函数的嵌套(一个函数里面又调用了另外一个函数)
    Unity UGUI的RawImage(原始图片)组件的介绍及使用
    22-09-02 西安 JVM(01)类加载器、stack栈、堆体系、堆参数调优、GC垃圾判定、垃圾回收算法
    创新研报 | 如何激发中国半导体企业发展潜力从而获得竞争优势,领跑新一轮增长?
    用于神经网络的FLOP和Params计算工具
    SpringBoot
    在CentOS 7上关闭SELinux
    高防服务器如何对异常流量进行识别
    湖仓一体电商项目(七):业务需求和分层设计及流程图
    Redis学习笔记18:基于spring data redis及lua脚本的分布式锁
  • 原文地址:https://www.cnblogs.com/akari16/p/16053224.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号