首页 > 其他分享 >【Vue2】计算属性computed究竟有什么魅力?

【Vue2】计算属性computed究竟有什么魅力?

时间:2024-11-19 17:43:49浏览次数:3  
标签:逻辑 缓存 计算 读取 Vue2 魅力 属性 computed

前言

        在Vue2的体系中,计算属性computed可谓是一个十分重要的工具,不仅能够帮助我们简化计算逻辑,而且能够优化应用的性能,相关问题在面试中也经常被问到。那么computed计算属性究竟有什么魅力呢,接下来随作者一起进入computed相关知识的分享吧!

概念规则

定义

        计算属性,能够当作data使用的属性,但意义在于处理计算逻辑。在optionsAPI中与data、methods、watch、direactive、components以及生命周期钩子等配置项层级一致,都属于options的一层对象。

        computed实际需要根据已定义属性的依赖进行计算而来,计算出来的值存在于vm或者vc实例中,与data一致的读取方式。

        但首次读取后,若不改变依赖数据的值,再次读取不会执行计算逻辑。

export default {
    data() {
        return {}
    },
    created() {},
    mounted() {},
    computed: {},
    methods: {},
}

原理

        底层与Vue响应式原理类似,借助Object.definepropty中的get和set方法。计算属性中,Vue会收集存在于计算属性中的响应式数据,并对其监听。

        读取属性时,判断缓存中是否存在值,若存在直接取值返回,若不存在则执行计算逻辑。

        修改依赖时,Vue会监听到依赖的数据发生了变化,并重新执行计算逻辑。

完整写法

        对象写法,设置一个叫total的计算属性,分别有get和set方法,set方法在绝大多数情况下不会使用,毕竟计算属性是为了简化计算逻辑,简明逻辑意义使用的,如果使用了set方法,整个逻辑会更加混乱。

        如果在set中直接赋值当前的计算属性,不会执行get方法。因为get方法只与其收集的响应式依赖有关,未修改依赖属性的值不会触发。

export default {
  data () {
    return {
      goods: [
        {
          id: 1,
          name: '苹果',
          price: 2,
          count: 0
        },
        {
          id: 2,
          name: '菠萝',
          price: 6,
          count: 0
        }
      ]
    }
  },
  computed: {
    total: {
        get () {
            console.log('total被读取了')
            return this.goods.reduce((total, item) => {
                return total + item.price * item.count
            }, 0)
        },
        set (val) {
            console.log('被修改了', val)
        }
    }
  }
}

简化写法

        函数写法,简化写法只需要关心计算逻辑,也就是get方法,然后将计算结果return即可。

export default {
  data () {
    return {
      goods: [
        {
          id: 1,
          name: '苹果',
          price: 2,
          count: 0
        },
        {
          id: 2,
          name: '菠萝',
          price: 6,
          count: 0
        }
      ]
    }
  },
  computed: {
    total () {
        return this.goods.reduce((total, item) => {
            return total + item.price * item.count
        }, 0)
    }
  },
}

缓存机制

         缓存机制是computed的一个闪光点,这个缓存机制节省了大量的计算,从而提升了整体性能。如下所示,有总价1、总价2、总价3共3个读取的地方。初始化时只读取1次,修改依赖时也仅被读取1次。如果读取3次,有2次是浪费的。随着数据量和逻辑复杂度的提升,这种性能问题会越来越明显,所以这个缓存机制我认为是很伟大的设计。

        正因为有缓存机制,那么计算属性对数据的实时性以及异步逻辑就显得不那么友好了。正如计算属性的原理,他会去收集所有的响应式依赖,如果在computed中获取时间戳、请求接口、创建定时器,那么计算属性收集到的并不是响应式依赖,所以不会再次执行计算逻辑,因此上述情况使用计算属性可能带来难以预料的结果。

computed与methods

        计算属性与方法的区别:

  • 计算属性有缓存,没有修改依赖则不会变化;方法没有缓存,每次调用会重新执行。(因此不需要缓存的情况可以使用methods)
  • 计算属性会收集其响应式依赖;方法则直接过程式执行。
  • 计算属性与data类似,直接读取;方法需要以触发、事件的方式去调用。
  • 计算属性不建议耦合异步、实时性逻辑;方法可以做任意逻辑。
  • 计算属性本质是可读写的数据;方法本质是一系列逻辑性操作。

总结

        综上,计算属性是一种十分巧妙的设计,可以将非常冗杂的计算逻辑抽离,对代码的可维护性与可扩展性提供了保障。响应式数据的计算性能方面更加显著,结合缓存机制避免大量的、重复的、多余的计算。用好computed计算属性,代码风格也会更加优雅,可读性也会大大提高。

        感谢各位读者的观看,有什么意见或建议欢迎评论或私信。

标签:逻辑,缓存,计算,读取,Vue2,魅力,属性,computed
From: https://blog.csdn.net/mayuhao0000/article/details/143877054

相关文章

  • vite4+vue2+vant2+less构建项目,按需加载定制主题配置说明
    步骤1:安装vant2、consola、less、vite-plugin-style-import说明:因为vant2需要consola,所以必装;安装加载vant组件样式,必装:vite-plugin-style-import,版本注意是2.0以上 步骤2:vite.config.js配置://vite.config.jsimportfsfrom'node:fs';importpathfrom'path';i......
  • vue2 验证码
    StaticVerify.vue<template><canvasref="canvasRef"class="verify":width="width":height="height"@click="drawCode"></canvas></template><script>exportdefault{......
  • 移动端Vue2实现文件图片上传功能
    基于Vue2 +Vant2组件库实现:废话不多说,直接看代码:主要代码:methods:{//上传图片之前的操作beforeRead(file){letarr=file.name.split('.');letfileType='.'+arr[arr.length-1].toLowerCase();con......
  • 《探索 Java 代码的魅力》
    在编程的世界里,Java无疑是一颗璀璨的明星。它以其强大的功能、跨平台性和广泛的应用场景,成为了众多开发者的首选语言。一、Java的历史与发展Java诞生于1995年,由SunMicrosystems公司推出。它的设计初衷是为了开发一种可以在各种不同的设备上运行的编程语言,以实现“......
  • vue2-组件化编程
    模块:向外提供特定功能的js呈现组件:用来实现局部(特定)功能效果的代码集合模块化:当应用中的js都以模块来编写的,那这个应用就是一个模块化的应用组件化:当应用中的功能都是多组件的方式来编写的,那这个应用就是一个组件化的应用编写组件-非单文件组件非单文件组......
  • vue2-基础核心
    vue简介vue中文官网动态构建用户界面的渐进式JavaScript框架vue的特点:遵循MVVM模式采用组件化模式,提高代码复用率,让代码更好维护声明式编码,无需直接操作DOM,提高开发效率,编码简洁、体积小,运行效率高本身只关注UI,也可以引入其他三方库开发项目使用虚拟DOM+优秀的Diff算......
  • 艺术与科技交相辉映:历史场馆触摸屏设计,绽放传统文化迷人魅力
    在历史场馆中,触摸屏设计是艺术与科技融合的典范。它将传统文化从古老的束缚中解放出来,焕发出迷人魅力。通过高清屏幕,精美的古籍、书画等文物以数字化形式呈现,细节纤毫毕现。触摸交互设计,让参观者可以随心翻阅、缩放,仿佛打破时空界限与历史对话。比如在展示古代建筑时,利用3D......
  • 10分钟入门vue2!!
    概念:Vue是用于构建用户界面的渐进式(就是学一点就能够用一点)框架,总的来说,就是基于数据来构建用户页面,以便于用户看懂。Vue的两种使用方式:1.核心包开发2.核心包加插件加工程化开发1.Vue的基础语法1.创建第一个Vue实例准备容器div引包<scriptsrc="https://cdn.jsdelivr.......
  • vue3:computed
    扫码或者点击文字后台提问原文: https://mp.weixin.qq.com/s/36dd--oj6jmkZblfJRh4iw computed支持选项式写法和函数式写法1.选项式写法支持一个对象传入get函数以及set函数自定义操作 2.函数式写法只能支持一个getter函数不允许修改值的<template><div><d......
  • 记录--微前端qiankun接入vue2&vue3项目
    ......