vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分
vue中computed和watch的对比是一个很有意思的话题。
看过官网教程以后,我们往往更倾向多使用computed。computed优点很多,却在某些时候不太适用。
今天我们就稍微讨论一下,当我们在编写一个子组件时,需要同步父子组件的属性props时,computed与watch的选用。
举个例子好了。
首先看computed:
props: {
letter: {
type: String,
default: a
}
},
computed: {
innerLetter: {
get () {
return this.letter;
}
set (value) {
this.$emit('change-letter', value);
}
}
}
再来看看watch:
props: {
letter: {
type: String,
default: a
}
},
data () {
return {
innerLetter: this.letter
}
}
watch: {
letter (value) {
this.innerLetter = letter;
}
}
methods: {
changeLetter (value) {
this.$emit('change-letter', value);
}
}
两种写法要实现的功能都是要实现向子组件传入的props能够与父组件保持一致,这两种写法都很常见。
我们来看看他们的区别是什么:
computed写法更简便,innerLetter作为letter的全权代理在子组件里可以像一个普通变量一样取值赋值。
computed写法,子组件内view的渲染,完全依靠父组件传入的props。如果父组件的props不响应子组件发出的change-letter事件,则子组件对innerLetter的赋值就失效了。
computed写法,子组件的渲染依赖父组件对change-letter的响应,所以当编写强交互组件,或独立打包的外部plugin时,应谨慎使用或尽量不使用。
watch写法更复杂,也更灵活,innerLetter作为一个data属性,可以在子组件内部随意改变其值,view会直接实时同步变化,父组件也通过接收change-letter事件来进行同步。
watch写法可以自定义change-letter的时机,当子组件innerLetter需要响应mousemove等密集事件时,子组件的view层渲染更实时,子组件也可以通过过滤来减少change-letter事件发送的频率。
watch写法,在子组件仅read父组件的值,而不需要对其值进行修改时,完全可以用computed替代,computed性能更好,写法更简单。
ok,两种写法的区别你get到了么?
vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分的更多相关文章
- Vue中computed计算属性
话不多说,使用方法直接上代码//在模板中调用computedTest这个函数,切记不要在函数后添加()<template> <div class="home"&g ...
- Vue中computed(计算属性)、methods、watch的区别
实现效果:字符串的动态拼接 methods方法 html: <div id="app"> <!-- 监听到文本框数据的改变 --> <input ty ...
- vue中computed计算属性与methods对象中的this指针
this 指针问题 methods与computed中的this指针 应该指向的是它们自己,可是为什么this指针却可以访问data对象中的成员呢? 因为new Vue对象实例化后data中的成员和c ...
- Vue学习之vue中的计算属性和侦听器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 怎样理解 Vue 中的计算属性 computed 和 methods ?
需求: 在 Vue 中, 我们可以像下面这样通过在 引号 或 双花括号 内写 js 表达式去做一些简单运算, 这是可以的, 不过这样写是不直观的, 而且在 html 中 夹杂 一些运算逻辑这种做法其实 ...
- Vue中的计算属性与$watch
计算属性:在模板中绑定表达式是非常便利的,但是他们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么vue.js将绑定表达式限制为一个表达式. ...
- Vue的computed计算属性是如何实现的
一个开始 有如下代码,full是一个计算属性,开始,他的值是'hello world',1s后,msg变成了‘I like’, full的值同步变成了'I like world';其原理解析来看一下. ...
- Vue之computed计算属性
demo.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...
- Vue中的计算属性和监听器(computed 与 watch)
react中数据是单向绑定的,而vue中数据是双向绑定的.为什么? 在react中,主要是通过setState 去改变state的值:而在vue中,会自动的触发set 与get 改变属性的值. 在vu ...
随机推荐
- 如何进行kubernetes问题的排障
排障的前置条件 k8s的成熟度很高,伴随着整个项目的扩增,以及新功能和新流程的不断引入,也伴随这产生了一些问题.虽然自动化测试可以排除掉大部分,但是一些复杂流程以及极端情况却很难做到bug的完全覆盖. ...
- 【IOS开发学习—OC篇】
一.instancetype和id关键字的区别 1)instancetype表示方法的返回类型和调用方法的对象类型相同. 2)在Object-C引入instancetype之前,初始化方法的返回类型都 ...
- Vue+element UI实现表格数据导出Excel组件
介绍 这是一个可以将页面中的表格数据导出为Excel文件的功能组件,该组件一般与表格一起使用,将表格数据传给组件,然后通过点击组件按钮可将表格中的数据导出成Excel文件. 使用方法 由于封装该组件内 ...
- SSHD服务安全的连接
SSHD服务 SSH 安全的远程连接 OpenSSH 工具 centos服务端的包:openssh-server centos客户端的包:openssh-clients 主要配置文件一般安装完成后再/ ...
- flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据
1, 生成表 db.Model主要用于数据库的增删改查操作, 构建表交给db.Table完成 安装 pip install flask-migrate from datetime import dat ...
- Springboot中的缓存Cache和CacheManager原理介绍
背景理解 什么是缓存,为什么要用缓存 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了 所以缓存并不是什么高大上的技术,只是个 ...
- springboot~高并发下耗时操作的实现
高并发下的耗时操作 高并发下,就是请求在一个时间点比较多时,很多写的请求打过来时,你的服务器承受很大的压力,当你的一个请求处理时间长时,这些请求将会把你的服务器线程耗尽,即你的主线程池里的线程将不会再 ...
- CSS(7)--- 通俗讲解清除浮动
CSS(7)--- 通俗讲解清除浮动 上一篇讲了CSS浮动 博客地址:CSS(6)---通俗讲解浮动(float) 一.理解清除浮动 1.为什么要清除浮动 我们前面说过,浮动本质是用来做一些文字混排效 ...
- 使用Spring安全表达式控制系统功能访问权限
一.SPEL表达式权限控制 从spring security 3.0开始已经可以使用spring Expression表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限.Spring ...
- 【Java】抽象类和接口详解
抽象类 一.抽象类的概述 现在请思考一个问题:假如我现在又Dog.Cat.Pig等实例对象,现在我们把它们都抽象成一个Animal类,这个类应该包含了这些Dog.Cat.Pig等实例对象eat的功能, ...