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

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

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的使用方法,以及这两个钩子函数的区别,在实际的企业项目开发中,使用的场景和次数较多,所以尽量写的稍微详细一些,同时也将笔记的代码放在了开源仓库,希望对大家在开发vue2.x的项目中有所帮助

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

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

vue2.x版本中computed和watch的使用入门详解-关联和区别的更多相关文章

  1. vue2.x版本中computed和watch的使用入门详解-computed篇

    前言 在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作. 基础使用 在computed中,声 ...

  2. vue2.x版本中computed和watch的使用入门详解-watch篇

    前言 watch顾名思义,属于vue2.x版本中,监听和观察组件状态变化的钩子函数,常见的应用场景有监听路由变化,以及父组件传递给子组件的props数据的变化等 基本使用 在使用watch的时候,需要 ...

  3. jquery中attr()与prop()函数用法实例详解(附用法区别)

    本文实例讲述了jQuery中attr()与prop()函数用法.分享给大家供大家参考,具体如下: 一.jQuery的attr()方法 jquery中用attr()方法来获取和设置元素属性,attr是a ...

  4. 在 IntelliJ IDEA 中配置 JSF 开发环境的入门详解

    JSF 作为 JavaEE 官方标准,在了解并掌握其基本开发技术后,对于功能要求较高.业务流程复杂的各种现代 Web 应用程序开发将会成为非常合适且强大的高效率开发利器.JSF 的开发环境搭建涉及到在 ...

  5. vue2.x版本中Object.defineProperty对象属性监听和关联

    前言 在vue2.x版本官方文档中 深入响应式原理 https://cn.vuejs.org/v2/guide/reactivity.html一文的解释当中,Object.defineProperty ...

  6. SVN组成中trunk,branches and tags功能用法详解

    SVN组成中trunk,branches and tags功能用法详解  我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...

  7. opencv中 int main(int argc,char* argv[])详解

    opencv中  int main(int argc,char* argv[])详解 argc是命令行总的参数个数     argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数     ...

  8. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  9. UIViewController中各方法调用顺序及功能详解

    UIViewController中各方法调用顺序及功能详解 UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, ...

随机推荐

  1. JDK线程池

    简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力,但频繁的创建线程的开销是很大的,那么如何来减少这部分的开销了,那么就要考虑使用线程 ...

  2. JVM学习——类加载机制(学习过程)

    JVM--类加载机制 2020年02月07日14:49:19-开始学习JVM(Class Loader) 类加载机制 类加载器深入解析与阶段分解 在Java代码中,类型的加载.连接与初始化过程中都是在 ...

  3. 实际项目中使用CompletionService提升系统性能的一次实践

    随着互联网应用的深入,很多传统行业也都需要接入到互联网.我们公司也是这样,保险核心需要和很多保险中介对接,比如阿里.京东等等.这些公司对于接口服务的性能有些比较高的要求,传统的核心无法满足要求,所以信 ...

  4. kaptcha验证码参数设置

    Constant 描述 默认值 kaptcha.border 图片边框,合法值:yes , no yes kaptcha.border.color 边框颜色,合法值: r,g,b (and optio ...

  5. oracle数据库表导出

    寻找一个测试table,清空,将需要导出的表导入表中的任意一列,写导出语句,导出. EXPDP USERID='user/account@orcl11 as sysdba' schemas=temp ...

  6. KVM 虚机镜像操作, 扩容和压缩

    KVM镜像操作 qemu-img命令 创建镜像 qemu-img create # 创建一个设备空间大小为10G的镜像 qemu-img create -f qcow2 centos7-guest.q ...

  7. Learning Schedules

    近期目标 1. 争取搞定小论文 2. Java SE 学习 3. 剑指Offer每日1-2题

  8. Docker仓库--registry与harbor

      搭建私有仓库的两种方式: Registry Harbor  一.registry的搭建 docker官方提供了一个搭建私有仓库的镜像registry,只需下载镜像,运行容器并暴露5000端口即可. ...

  9. 【C# .Net GC】自动内存管理

    原文:https://docs.microsoft.com/zh-cn/dotnet/standard/automatic-memory-management 自动内存管理是公共语言运行时在托管执行过 ...

  10. 【windows 访问控制】十一、C# 实操 对象 System.Security.AccessControl 命名空间

    AccessControl 命名空间 结构图 解说: DirectorySecurity=目录ACLFileSecurity=文件ACLFileSystemAuditRule=目录和文件中SACL中的 ...