-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第 146 题:Vue 中的 computed 和 watch 的区别在哪里 #304
Comments
watch监听一个实例上的变量的变化,可以接受2个参数(newValue, oldValue),即变化的最新值和上一次变化的旧值 |
computed:计算属性 计算属性是由data中的已知值,得到的一个新值。 监听data中数据的变化 1.watch擅长处理的场景:一个数据影响多个数据 2.computed擅长处理的场景:一个数据受多个数据影响 |
|
计算属性,实质就是将变量的get属性重写成了你所定义的那个函数,也就是说实现了数据劫持那一步,无所谓data还是props,都可以作为计算属性函数的依赖值。 属性监听,其实也就是观察者模式将变量丢进了观察者收集器当中,变化可以被通知到。 |
计算属性是定义变量的get和set,对于复杂数据类型,引用地址不变,则不会触发set,get会缓存,不会重复计算。watch是变量变化时做点什么(触发一些函数),数组的一些变异的方法(push/splice/shift等)不会触发set,只能触发watch。 |
computed:计算,顾名思义就是根据相关数据的变化得到一个新值。 |
watch 会生成一个watcher对象,在监视的属性每次变动时都会触发回调 |
Watch computed |
vue:2.6.10 <template>
<div class="container" id="home">
<p>{{a}}</p>
<p>{{b}} </p>
<p>{{d}}</p>
<button @click="change">改变a</button>
</div>
</template>
<script>
export default {
data() {
return {
a: 1,
b: 2
}
},
methods: {
change() {
this.a = 5;
}
},
watch: {
a() {
console.log('watch a');
}
},
computed:{
d() {
console.log('computed');
return this.a + this.b;
}
}
}
</script> watch: a属性变化时打印. 这个例子change一直都是5,实际上不会一直执行打印,都有缓存. |
没看过这方面的源码,但是据说computed的依赖变化的时候如果没对computed里面的值进行使用,好像是不会触发computed的。 |
因为computed没有对观察者进行实现,只是做了数据劫持 |
|
我总结了下,有如下几点:
|
感觉总结的挺好的,赞 |
最直接的:computed中定义的是变量,是可展示的,可操作的值,而watch只是一个工具,服务于变量 |
|
共同点:都是经过依赖收集和派发更新的流程 |
一、 computed: {
fullName: function () {
// this.name 的属性 firstName/lastName 变化时 fullName 会响应。
return this.name.firstName + ' ' + this.name.lastName
}
},
watch: {
name: function () {
// this.name 的属性 firstName/lastName 变化时不会触发。
},
deep: false, // 默认是false
} 二、 三、 四、watch主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作,可以看作是 computed 和 methods 的结合体; |
No description provided.
The text was updated successfully, but these errors were encountered: