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 ...
随机推荐
- 使用FinalShell 安装jdk和tomcat流程(Linux系统是centOS7.5)
本文是作者原创,版权归作者所有.若要转载,请注明出处 我今天刚刚买了一个一年的百度云服务器,85元,还是很便宜的,正好用来练练linux,至于为什么使用FinalShell 而不是xshell,因为F ...
- wordpress插件:multiple post thumbnails(可为文章添加多个特色图片)
我们经常会给wordpress的文章加上特色图片来实现日志缩略图的需求,但是很多时候一张图片并不能够完美而又全面的表达我们wordpress文章的内容,这时候您可能就会需要这样一个能让wordpres ...
- 006.Kubernetes二进制部署ETCD
一 部署ETCD集群 1.1 安装ETCD etcd 是基于 Raft 的分布式 key-value 存储系统,由 CoreOS 开发,常用于服务发现.共享配置以及并发控制(如 leader 选举.分 ...
- Servlet相关学习
Servlet入门解析 概念 运行在服务器端的小程序 servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则 实现servlet接口.复写方法 快速入门 创建web项目 ...
- [LC]530题 二叉搜索树的最小绝对差
①题目 给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值. 示例 : 输入: 1 \ 3 / 2 输出:1 解释:最小绝对差为1,其中 2 和 1 的差的绝对值为 ...
- spark集群搭建(三台虚拟机)——系统环境搭建(1)
!!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...
- suseoj 1211: 子集和问题 (dfs)
1211: 子集和问题 时间限制: 1 Sec 内存限制: 128 MB提交: 2 解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 子集和问题的一个实例为<S ...
- 五分钟学会HTML5的WebSocket协议
1.背景 很多网站为了实现推送技术,所用的技术都是Ajax轮询.轮询是在特定的的时间间隔由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器.这种传统的模式带来很明显的缺点 ...
- 如何打造一款m3u8视频爬虫
0.前言 m3u8是一种很常见的网页视频播放器的视频源,比如说中国大学MOOC中课程就是使用了该种视频格式. 随便打开一门课程,就可以发现在网络请求中存在一个m3u8的文件,在preview中预览,它 ...
- DDD实战与进阶 - 值对象
目录 DDD实战与进阶 - 值对象 概述 何为值对象 怎么运用值对象 来看一个例子 值对象的持久化 总结 DDD实战与进阶 - 值对象 概述 作为领域驱动设计战术模式中最为核心的一个部分-值对象.一直 ...