博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分
阅读量:5279 次
发布时间:2019-06-14

本文共 1274 字,大约阅读时间需要 4 分钟。

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能够与父组件保持一致,这两种写法都很常见。

我们来看看他们的区别是什么:

  1. computed写法更简便,innerLetter作为letter的全权代理在子组件里可以像一个普通变量一样取值赋值。
  2. computed写法,子组件内view的渲染,完全依靠父组件传入的props。如果父组件的props不响应子组件发出的change-letter事件,则子组件对innerLetter的赋值就失效了。
  3. computed写法,子组件的渲染依赖父组件对change-letter的响应,所以当编写强交互组件,或独立打包的外部plugin时,应谨慎使用或尽量不使用。

  4. watch写法更复杂,也更灵活,innerLetter作为一个data属性,可以在子组件内部随意改变其值,view会直接实时同步变化,父组件也通过接收change-letter事件来进行同步。
  5. watch写法可以自定义change-letter的时机,当子组件innerLetter需要响应mousemove等密集事件时,子组件的view层渲染更实时,子组件也可以通过过滤来减少change-letter事件发送的频率。
  6. watch写法,在子组件仅read父组件的值,而不需要对其值进行修改时,完全可以用computed替代,computed性能更好,写法更简单。

ok,两种写法的区别你get到了么?

转载于:https://www.cnblogs.com/yinzhida/p/10673952.html

你可能感兴趣的文章
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
CSS中隐藏内容的3种方法及属性值
查看>>
每天一个linux命令(1):ls命令
查看>>
根据xml生成相应的对象类
查看>>
查看ASP.NET : ViewState
查看>>
Android StageFrightMediaScanner源码解析
查看>>
vue项目中开启Eslint碰到的一些问题及其规范
查看>>