Vue2.0 探索之路——计算属性缓存与methods的区别

计算属性Computed与method有相同的属性,稍微不太好理解。

一、属性对比

属性页面重新渲染适用场景
computed不变化较大量的计算和改变频率较低的属性
methods页面元素的data变化无缓存

二、Demo

methods样例

<!DOCTYPE html>
<html lang="en">
<head>  
    <meta charset="UTF-8">
    <title>Vue.js</title>
    <link rel="stylesheet" href="style.css">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="vue-app">
        <h1> Computed 计算属性 </h1>
        <button v-on:click="a++">Add to A</button>
        <button v-on: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>
new Vue({
    el:"#vue-app",
    data:{
        a:0,
        b:0,
        age:20
    },
    methods:{
        addToA:function(){
            console.log("Add to A");
            return this.a + this.age;
        },
        addToB:function(){
            console.log("Add to B");
            return this.b + this.age;   
        }
    }
});

这里写图片描述

发生重新渲染,method调用总会执行该函数。所以,每次点击按钮触发时间,不论是add to A还是add to B按钮,都会触发methods方法。
在method的每一次点击会触发所有方法,每一次都会渲染DOM结构

computed属性样例

计算属性不能在方法中加入(),计算属性更加优化。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue.js</title>
    <link rel="stylesheet" href="style.css">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="vue-app">
        <h1> Computed 计算属性 </h1>
        <button v-on:click="a++">Add to A</button>
        <button v-on: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>
new Vue({
    el:"#vue-app",
    data:{
        a:0,
        b:0,
        age:20
    },
    computed:{
        addToA:function(){
            console.log("Add to A");
            return this.a + this.age;
        },
        addToB:function(){
            console.log("Add to B");
            return this.b + this.age;   
        } 
    }
});

computed
computed只在msg更新时计算,计算结果存在缓存中。
所以点击Add to A按钮,只调用addToA方法。

三、总结

Vue使用的是虚拟DOM,当与真实DOM结构不同是才会触发相应方法,method每次都会执行,每点击一个都会执行所有方法。
计算属性只有在相关依赖发生改变时才会重新求值,当页面重新渲染(不是刷新)的时候,计算属性不会变化,直接读取缓存使用。在相关依赖发生改变时才会重新求值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值