vue.js 计算属性与$watch的区别?
链接:https://www.zhihu.com/question/55846720/answer/331760496
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
设计模式不同
Computed 是一种声明式的解决方案,我们只需要告诉 vue 某个属性的构成方法,就可以一劳永逸的放手不管了。
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
Watch 是一种命令式的解决方案,我们需要自己处理 vue 某个属性依赖要素的变化,根据变化重置这个属性。
watch: {
firstName: function (val) {
this.fullName = val + ' ' + this.lastName
},
lastName: function (val) {
this.fullName = this.firstName + ' ' + val
}
}
因此,个人十分享受 Computed ,甚至不惜使用 vue-async-computed 来实现异步下的 Computed。
asyncComputed: {
async someCalculation () {
const x = await someAsycFunction()
const y = await anotherAsyncFunction()
return x + y
}
}
响应行为不同
Computed 的响应是 deep 的响应,即在计算过程中用到的对象的属性发生变化,是可以被监听到的。
computed: {
fullName: function () {
// this.name 的属性 firstName/lastName 变化时 fullName 会响应。
return this.name.firstName + ' ' + this.name.lastName
}
}
然而,一旦 Computed 没有在模板中使用,vue 是不会为我们计算 Computed 内容的。
Watch 的响应默认为非 deep 的响应,即观测的是某个对象的字面量。当然,我们可以为 Watch 设置 deep 响应类型或是监听其属性。
watch: {
name: function () {
// this.name 的属性 firstName/lastName 变化时不会触发。
// TODO
}
}
总之
两者的使用应当是互补的:
在获得较为简单的属性,且用于展示时,用 computed 可以简化书写。
在进行比较复杂的异步操作,或有比较明显的副作用时,用 watch 逻辑更清晰。
注:个人觉得依赖较多的仍应该用 computed 或 async-computed。
另外,需要注意的是,watch 的计算早于同依赖的 computed。
vue.js 计算属性与$watch的区别?的更多相关文章
- Vue.js 计算属性(computed)
Vue.js 计算属性(computed) 如果在模板中使用一些复杂的表达式,会让模板显得过于繁重,且后期难以维护.对此,vue.js 提供了计算属性(computed),你可以把这些复杂的表达式写到 ...
- Vue.js 计算属性是什么
Vue.js 计算属性是什么 一.总结 一句话总结: 模板 表达式 维护 在模板中表达式非常便利,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护 ...
- Vue.js 计算属性
Vue.js 计算属性 使用计算属性的实例: <!DOCTYPE html> <html> <head> <meta cahrset="utf-8& ...
- Vue.js 计算属性computed和methods的区别
在vue.js中,有methods和computed两种方式来动态当作方法来用的 如下: 两种方式在这种情况下的结果是一样的 写法上的区别是computed计算属性的方式在用属性时不用加(),而met ...
- vue.js计算属性 vs methods
计算属性:Vue.js 模板内的表达式非常便利,但是缺点就是只能用于简单的运算,如果模板中有太多的逻辑运算会让模板不堪重负且难以维护.恰恰计算属性可以处理复杂的逻辑运算,也就是说对于任何复杂逻辑你都应 ...
- Vue.js 计算属性的秘密
计算属性是一个很邪门的东西,只要在它的函数里引用了 data 中的某个属性,当这个属性发生变化时,函数仿佛可以嗅探到这个变化,并自动重新执行. 上述代码会源源不断的打印出 b 的值.如果希望 a 依赖 ...
- vue生命周期以及vue的计算属性
一.Vue生命周期(vue实例从创建到销毁的过程,称为生命周期,共有八个阶段) 1.beforeCreate :在实例初始化之后,数据观测 (data observer) 和 event/watche ...
- 一起学Vue之计算属性和侦听器
概述 在Vue开发中,模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.当你想要在模板中多次引用相同表达式时,就会更加难以处理.所以,对于任何复 ...
- 浅谈Vue中计算属性(computed)和方法(methods)的差别
浅谈Vue中计算属性(computed)和方法(methods)的差别 源码地址 methods方法和computed计算属性,两种方式的最终结果确实是完全相同 计算属性是基于它们的响应式依赖进行缓存 ...
- vue的计算属性computed和监听器watch
<template> <div> this is A.vue <br> <!--计算属性--> <label for="msg" ...
随机推荐
- 【ZooKeeper面试题】从基础到深入
ZooKeeper面试题:从基础到深入 基础概念 什么是ZooKeeper?它的主要用途是什么? ZooKeeper是一个分布式的.开源的协调服务,用于分布式应用程序 主要用途:配置管理.命名服务.分 ...
- 记录一次OPENCV安装的排坑之路
1.首先从opencv官网上下载 2.下载之后可以得到opencv的源代码文件,解压后是这个样子 3.下载cmake 选择Installer安装,安装完了就会看见这个玩意 4.下载opencv con ...
- Django请求生命周期流程图
Django请求生命周期流程图 流程如下: 浏览器 发送请求(Http请求) web服务网关接口(Django默认的wsgiref模块不能承受高并发,最大只有1000左右) 中间件 >> ...
- typescript结构化类型应用两例
介绍 结构化类型是typescript类型系统的一个重要特性,如果不了解这个特性,则经常会被typescript的行为搞得一头雾水,导致我们期待的行为与实际的行为不一致.今天我们就来看两个例子. 不了 ...
- Luogu P11159 【MX-X6-T5】再生 题解
P11159 [MX-X6-T5]再生 简单数学题. 首先根不同肯定是在诈骗,最长的链的链顶就是树根.然后考虑一条长链内,除了链顶都可以随意排序,对于每条链,答案乘上链中元素数量减一的阶乘. 然后考虑 ...
- printf \r \n
简介 \r 回到这一行的开始处 \n 换下一行 参考链接 csdn
- 记录React echart demo实践
最近在了解学习React,找了个demo Echarts-based-on-React:基于react技术栈,使用Echarts,实现地图深钻.柱状图.折线图.散点图 Echarts-based-on ...
- RestCloud API低代码开发平台,快速实现多表跨数据源API发布
RestCloud API低代码开发平台本身已含有:注解式开发.API接口自动扫描.验证框架.授权框架.缓存框架.依赖注入框架.多数据源管理框架.多数据库事务管理框架等核心功能.相比于传统API开发模 ...
- 推荐一款比Flink CDC更好用的免费CDC工具
很多中大型企业都希望选择一款足够轻量好用的CDC工具,而且最好是小白用户都能使用的CDC工具,今天就推荐一款小白都能安装并立即使用的CDC工具给大家. CDC(Change Data Capture) ...
- 关于智能体(AI Agent),不得不看的一篇总结(建议收藏)
大家好,我是汤师爷,专注AI智能体分享,致力于帮助100W人用智能体创富~ 最近,AI技术的发展可谓是日新月异,尤其是AI智能体这个领域,真是让人眼花缭乱. 不知道你是否和我一样,经常被各种AI智能体 ...