vue中 computed和watch的一些简单理解(区别)(转载)
今天看到一个问题,就是 vue 的 computed 和 watch 要在哪些场景下使用,其实也就是在问他们的区别。computed 也就是计算属性,它可以帮助我们将在模板中的一些稍微复杂的逻辑计算放回到js代码中,方便理解与修改维护;就拿官网给的例子,如下代码片段。
<div id="example">
{{ message.split('').reverse().join('') + number }}
</div>
这js片段虽然看起来挺简单的,但是,如果以后多了需求,要做多一两步的逻辑,在模板里面维护起来就麻烦了,所以类似这种的,我们将其写到 computed 计算属性里面。也就是下面这样子,这样子看起来美观,一看就清楚这是干啥用的
<template>
<div>
<p>{{ reversedMessage }}</p>
</div>
</template>
<script>
export default {
name: 'test1',
data () {
return {
message: 'hello world',
number: 1
}
},
computed: {
// 字符串反转
reversedMessage () {
return this.message.split('').reverse().join('') + this.number
}
}
}
</script>
在 computed 中定义的每一个计算属性,都会被缓存起来,只有当计算属性里面依赖的一个或多个属性变化了,才会重新计算当前计算属性的值。上面的代码片段中,在 reversedMessage 中,它依赖了 message 和number 这两个属性,一旦其中一个变化了,reversedMessage 会立刻重新计算输出新值。
watch 是属性监听器,一般用来监听属性的变化(也可以用来监听计算属性函数),并做一些逻辑。在这里就稍微说下他监听属性的功能吧。
<template>
<div>
<p>{{ this.number }}</p>
</div>
</template>
<script>
export default {
name: 'test1',
data () {
return {
number: 1
}
},
created () {
setTimeout(() => {
this.number = 100
}, 2000)
},
watch: {
number (newVal, oldVal) {
console.log('number has changed: ', newVal)
}
}
}
</script>
上面的代码中,我们在 watch 中监听了 number 属性,并且在实例创建后2s执行对 number 属性的值的更改。我们可以在控制台中看到2s后打印了如下图:
就我自己目前来说,watch 一般就用来一个数据来影响多个数据的操作,或者比如说是用来监听 input 然后进行一些即时搜索操作什么的。
大概总结一下,computed 和 watch 的使用场景并不一样,computed 的话是通过几个数据的变化,来影响一个数据,而 watch,则是可以一个数据的变化,去影响多个数据。
补充一下:computed 跟 methods 里面的方法的区别,computed 的话访问的时候会直接返回已缓存的结果,而不会像 methods 一样再次计算
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?