vlambda博客
学习文章列表

【笔记】vue计算属性的一个应用场景

vue计算属性的一个应用场景.md

知识点不难~不代表可以划水写笔记~详细ing,笔记都能看通,未来用视频讲舒服更多~在积累一段时间

从一个需求来引入知识点:

  • 两个按钮,分别配置两个方法,Add to A 和Add to B

  • 在下面显示 A,B的值

  • 再显示 一个常量+A=? 一个常量+B =?

html代码如下~

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title> Vue.js </title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <link rel="stylesheet" href="style.css">
  <script src="vue.js"></script>
</head>
<body>
  <div id="vue-app">
    <h1> Computed 计算属性</h1>
    <button @click="a++">Add to A</button>
    <button @click="b++">Add to B</button>
    <p>A - {{ a }}</p>
    <p>B - {{ b }}</p>
    <p>Age + A = {{ addToA}}</p>
    <p>Age + B = {{ addToB}}</p>
  </div>
  <script src="app.js"></script>
</body>

</html>

是的你没有看错..我是src引入的vue~,为啥?

因为"vue中文文档''第一句话,不建议比较菜的用vue-cli  hhh

js代码如下

const vueOne = new Vue({
  el:"#vue-app",
  data:{
    a:0,
    b:0,
    age:20
  },
  methods:{
      addToA:function(){
       console.log('执行了addToA');
       return this.a+this.age;
     },
      addToB:function(){
      console.log('执行了addToB');
       return this.b+this.age;
     }
  }
});

代码不难~注意看我在addToA()方法里加了log.addToB()也是,看下控制台输出.

image-20220328204238972

(性能优化当然要想的极端点~)如果我写了1W个方法挂载在页面上~那么每次执行一个不是太浪费性能了~那么咋个办呢?

我都能想到...那Evan必然也知道~

用呗计算属性~代码如下:

【笔记】vue计算属性的一个应用场景
image-20220328205524944

直接把methods的代码复制到computed即可

然后你就会遇到这个报错~addToA不是一个函数???我写的函数我能不知道?咋就不是函数嘞?

【笔记】vue计算属性的一个应用场景
image-20220328205454843

这里解释一下,实际上是计算属性执行了一次~然后之后访问的时候只有结果.也就是有缓存,这个缓存不是函数~,不知道也影响不大

把这个玩意的括号去了即可.

【笔记】vue计算属性的一个应用场景
image-20220328205516730

这里放个思考哦~ 怎么可以把这个位置写上()小括号,依旧可以正常执行嘞~

看结果如下:

image-20220328205548697

原因分析:

今天群里分析的时候有人观点是~「当对应data的属性变化时,才会执行相应的方法」这实际上是比较片面的,实际上是

  1. vue会拷贝一份真实的dom,在这个case案例里是下面这几个dom结构,然后操作虚拟的dom
image-20220328205942655
  1. 当虚拟dom和真实的dom不一样时(因为加载完之后修改,就会引发重新渲染dom.但是vue会先阻塞),才会重新渲染这个不一样的dom,也就会触发这个方法~
  2. 再详细点就是,我修改了A,会有两个位置变化,第一个p,和第三个p,第三个p中有个addToA()方法,因此一起被触发了.

不要因为计算属性的这个优势就不停地使用计算属性,一般情况下依旧是使用再methods中的方法

计算属性一般使用在:大量耗时,和需要大量运算的时候使用(such as 搜索,遍历)