Vue.js计算属性

举报
发表于 2022/10/02 00:23:13 2022/10/02
【摘要】 变量在网页中是经常可能发生改变的,一种情况是程序内部让这个变量发生改变,另一种情况是网页用户让变量的值发生改变。不管是以什么样的方式修改了此变量的值,都有可能要根据这个变量产生的变化去联动产生其他效果变化,这里产生了两种情况,其他多个变量导致某个变量发生改变时,就用计算属性;,某个变量引起多个变量发生改变时,就使用侦听器。我们主要介绍一下计算属性。计算属性可以通过使用模板表达式进行简单的运算...

变量在网页中是经常可能发生改变的,一种情况是程序内部让这个变量发生改变,另一种情况是网页用户让变量的值发生改变。不管是以什么样的方式修改了此变量的值,都有可能要根据这个变量产生的变化去联动产生其他效果变化,这里产生了两种情况,其他多个变量导致某个变量发生改变时,就用计算属性;,某个变量引起多个变量发生改变时,就使用侦听器。我们主要介绍一下计算属性。

计算属性

可以通过使用模板表达式进行简单的运算,但是如果在一个网页中满屏都是用模板逻辑,那么会让维护成本增加,不便于对代码进行调整。例如:

<div id="myCode">
  {{ text.split('').reverse().join('') }}
</div>
复制代码

在上面这段代码中,模板语法已经不再是简单的声明式逻辑。以上代码是要对text进行字符串反转,当要在其他位置引用这个反转后的结果时,就必须要重复写多个text.split('').reverse().join(''),这样严重增加了代码量,所以Veu.js引入了计算属性。

对于那些较为复杂且逻辑混乱还要重复多处引用的变量属性,建议使用计算属性。

计算属性缓存vs方法

有的人或许会疑惑,用方法不是也可以达到相同效果吗?例如:

<P>计算之后的反转text: "{{ reversedText() }}"</p>
//在组件中
methods: {
   reversedText() {
       return this.text.split('').reverse().join('');
   }
}
复制代码

可以发现,这两种代码书写方式都可以达到想要的效果,那么为什么要用计算属性呢?两种方式的最后结果确实是完全相同的,不过计算属性的结果存在于缓存中,即便是被多次使用只需要计算一次,而方法就不同了,被使用多少次就会被执行多少次,这样就带来了不必要的资源消耗。很明显,使用计算属性的结果,只要text没有发生任何改变,访问任意次reversedText计算属性,都会从上次计算的结果缓存中读取数据,而不是去运行计算方法一次。

new Date().getTime()不是响应式依赖,所以下面的计算属性不会再更新。

computed: {
  now: function() {
    return new Date().getTime();
  }
}
复制代码

这样一比较,当页面触发重新编译时,调用方法都会重新再次执行一次函数。那么,用计算属性就好的多,为什么需要用计算属性的缓存呢?例如,有一个资源非常好的功能模块需要大量的计算属性A,甚至于会导致存在一个庞大的for循环,如果不进行数据缓存,那么将可能成倍增加资源的消耗,有时甚至会明显感受到网页编译速度变迟缓了,所以有的放矢使用计算属性是很有必要的。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。