首页 > 其他分享 >Vue进阶(二十八):浅析 Vue 中 computed 与 method 区别

Vue进阶(二十八):浅析 Vue 中 computed 与 method 区别

时间:2023-03-26 20:01:00浏览次数:57  
标签:Vue computed computedTest methodTest message 浅析 methods

一、前言

computed区别于method的两个点:

  1. computed是属性调用,而methods是函数调用;
  2. computed带有缓存功能,而methods不是;

下面看一个具体例子:

<!--HTML部分-->
<div id="app">
    {{message}}
    <p class="test1">{{methodTest}}</p>
    <p class="test2-1">{{methodTest()}}</p>
    <p class="test2-2">{{methodTest()}}</p>
    <p class="test2-3">{{methodTest()}}</p>
    <p class="test3-1">{{computedTest}}</p>
    <p class="test3-2">{{computedTest}}</p>
</div>

<!--script部分-->
let vm = new Vue({
    el: '#app',
    data: {
        message: '我是消息,'
    },
    methods: {
        methodTest() {
            return this.message + '现在我用的是methods'
        }
    },
    computed: {
        computedTest() {
            return this.message + '现在我用的是computed'
        }
    }
})

二、computed 属性调用

HTML的插值里computed中定义的方法是以属性访问形式调用的,{{computedTest}} 但是methods定义的方法,必须要加上()来调用,如{{methodTest()}},否则,视图会出现test1的情况,见下图 在这里插入图片描述

三、computed 缓存功能

首先,要明白缓存究竟有什么用?想必大家都知道HTTP缓存,其核心作用就是对一些服务端未更新的资源进行复用,避免一些无谓的请求,优化用户体验。

对于computed也是一样的: 在上面的例子中,methods定义的方法是以函数调用的形式来访问,那么test2-1,test2-2,test2-3是反复地将methodTest方法运行了三遍,如果碰到一个场景,需要1000个methodTest的返回值,那么毫无疑问,这势必造成大量性能浪费。

更恐怖的是,如果更改了message的值,那么这1000个methodTest方法每一个又会重新计算。

所以,官方文档反复强调对于任何复杂逻辑,都应当使用计算属性。

computed依赖于data中的数据,只有在它的相关依赖数据发生改变时才会重新求值。

如上例,在Vue实例化的时候,computed定义computedTest方法会做一次计算,返回一个值,在随后的代码编写中,只要computedTest方法依赖的message数据不发生改变,computedTest方法是不会重新计算的,也就是说test3-1,test3-2是直接拿到了返回值,而非是computedTest方法重新计算的结果。

这样的好处也是显而易见的,同样的,如果碰到一个场景,需要1000个computedTest的返回值,那么毫无疑问,这相对于methods而言,将大大地节约内存。哪怕改变了message的值,computedTest也只会计算一次而已。

四 、computed 其它说明

  • computed其实是既可以当做属性访问也可以当做方法访问。
  • computed的由来有一个重要原因,就是防止文本插值中逻辑过重,导致不易维护。

五、拓展阅读

标签:Vue,computed,computedTest,methodTest,message,浅析,methods
From: https://blog.51cto.com/shq5785/6150715

相关文章

  • 初入了解——Vue.js
    目录 前言:一.Vue.js介绍二.主要功能三.语言特点易用灵活性能版本记录: Vue3.xVue2.x Vue1.0 Vue0.12 Vue0.11四.运行环境 前言:根据上篇文章来继续了解Vue一.V......
  • web前端框架——Vue的特性
    目录前言: 一.vue二.特性1.轻量级2.数据绑定3.指令4.插件三.比较Angular、React、Vue框架之间的比较1.AngularAngular的优点:2.ReactReact的优点:3.vue3.Vue的优点:前言: ......
  • 摸索graphQL在前端vue中使用过程(三)
    上回说到,那个请求拦截的一个过程,我上次不会看官网教程,这次,终于有了新的发现。graphQL的interceptors(请求拦截器)importApolloClientfrom'apollo-boost';constapolloCl......
  • Vue核心 Vue简介 初识
     1.1.Vue简介 1.1.1.官网●英文官网●中文官网 1.1.2.介绍与描述●Vue是一套用来动态构建用户界面的渐进式JavaScript框架○构建用户界面:把数据通过某种办......
  • Vue核心 模板语法 数据绑定
    1.3.模板语法Vue模板语法包括两大类1插值语法功能:用于解析标签体内容写法:{{xxx}},xxx是js表达式,可以直接读取到data中的所有区域2指令语法功能:用于解析标签(包括:标签属......
  • Vue核心 el与data的两种写法
    1.5.el与data的两种写法el有2种写法a创建Vue实例对象的时候配置el属性b先创建Vue实例,随后再通过vm.$mount('#root')指定el的值data有2种写法a对象式:data:{}b函数式:dat......
  • 浅析Nginx文件解析漏洞
    浅析Nginx文件解析漏洞本文章将从五个维度对Nginx文件解析漏洞进行剖析——原理、危害、检测、防御、复现1、原理​ Nginx文件解析漏洞的产生原因是由于Nginx配置文件de......
  • Vue3的fetch和Axios
    Vue3的fetch和Axios都是用于发送HTTP请求的JavaScript库,但是它们之间有以下几个区别:语法不同:fetch是浏览器原生的API,使用起来比较简单,而Axios是一个第三方库,需要通过npm安......
  • vue.js客服系统实时聊天项目开发(十三)日期缩短展示,同一天只展示时秒,同一年展示月日小时
    客服系统中在展示聊天消息时间的时候,根据当前日期与目标日期的情况进行缩短显示,如果是同一天,只显示小时、分钟、秒,如果是同一年,只显示月日小时、分钟、秒,否则显示全部,根据这......
  • vue.js客服系统实时聊天项目开发(二十)vue项目框架目录结构
    在之前的文章里没有介绍vue项目的目录结构,现在来介绍一下Vue项目的目录结构通常如下:.|--public||--favicon.ico||--index.html|--src||--assets||......