首页 > 其他分享 >computed

computed

时间:2024-10-28 15:58:58浏览次数:4  
标签:缓存 methods Vue 计算 属性 computed

计算属性关键词: computed。

计算属性在处理一些复杂逻辑时是很有用的。

在 Vue.js 中,computed 属性是一种强大的特性,用于定义依赖于其他响应式数据的计算值。

computed 属性不仅能够简化模板中的表达式,还能够缓存计算结果,避免不必要的重复计算,从而提高性能。

本文将深入探讨 Vue 中 computed 属性的实现原理,包括其工作机制、依赖追踪、缓存策略等方面。
1. Computed 属性概述

Computed 属性是 Vue 实例中的一个特殊属性,它允许开发者定义一个计算值,该值依赖于其他响应式数据。Computed 属性具有以下特点:

    响应式:当依赖的数据发生变化时,computed 属性会自动重新计算。
    缓存:computed 属性会缓存计算结果,只有当依赖的数据发生变化时,才会重新计算。
    惰性求值:computed 属性在首次访问时才会进行计算,之后会根据依赖数据的变化情况决定是否重新计算。

可以看下以下反转字符串的例子:

不使用computed

<div id="app">
  {{ message.split('').reverse().join('') }}
</div>

使用computed

{{ reversedMessage  }} 是一个 computed 属性,它依赖于 massage。当 massage 发生变化时,massage 会自动重新计算

<div id="app">
  <p>原始字符串: {{ message }}</p>
  <p>计算后反转字符串: {{ reversedMessage }}</p>
</div>
 
<script>
var vm = new Vue({
  el: '#app',
  data: {
    message: 'Runoob!'
  },
  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }
})
</script>

 

不使用computed使用method

methods: {
  reversedMessage2: function () {
    return this.message.split('').reverse().join('')
  }
}

computed和methods区别

我们可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,

只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行。 

可以说使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性。

使用 Watcher 进行性能优化

在某些情况下,可以使用 watch 选项来替代 computed 属性,以实现更细粒度的控制和性能优化。

 

   watch: {
      firstName: 'updateFullName',
      lastName: 'updateFullName'
    },
    methods: {
      updateFullName() {
        this.fullName = `${this.firstName} ${this.lastName}`;
      }
    }

总结

Vue 的 computed 属性通过依赖追踪和缓存策略,实现了响应式计算和性能优化。在实现原理上,computed 属性依赖于 Vue 的响应式系统,

通过 Watcher 实例进行依赖收集和缓存控制。通过深入理解和掌握 computed 属性的实现原理,开发者可以更好地利用这一特性,提高应用的性能和可维护性。

在实际开发中,应根据具体需求合理使用 computed 属性,并结合其他优化手段,如避免不必要的计算和使用 Watcher 进行细粒度控制,从而构建高效、稳定的 Vue 应用。

 

标签:缓存,methods,Vue,计算,属性,computed
From: https://www.cnblogs.com/zycai/p/18510844

相关文章

  • Vue computed 与 watch
    在Vue.js框架中,computed和watch都是响应式系统的一部分,但它们在功能和用途上有所不同。computed(计算属性):Computed是基于它们的依赖进行缓存的,只有当依赖项发生改变时才会重新计算。它们通常用于当你需要根据现有数据派生出一些状态时。Computed可以有getter和setter,但默认只......
  • [Vue] computed、watch 和 watchEffect 的区别
    前言当依赖的数据发生改变,computed、watch和watchEffect都会被触发。但是它们之间又有自己的特点,使用场景也不一样。关于computed是什么,以及它和普通函数的区别、运用场景,查看我的另一篇博文:[Vue]computed和普通函数的区别。特性watchwatchEffectcomputed......
  • vue3中computed和watch的使用
    一computd计算属性computed是Vue3中用于创建计算属性的功能。它允许你定义基于响应式数据的动态值,这些值会在其依赖的数据发生变化时自动更新。使用场景依赖于其他响应式数据的计算结果:你可以创建一个计算属性,其值依赖于其他响应式数据,并在这些数据变化时自动更新。......
  • computed计算属性及方法对比和循环遍历统计以及watch和watchEect监听的用法
    1.computed计算属性及方法对比1.了解computed计算属性和用法在我们的一些应用中可以看的应用会给我们提供一些计算类的功能比如取名,它会给你提供两个输入框,然后在你给这两个输入框输入值的时候会在下方生成你输入这个两个值的结合值,就比如你先输入了一个姓氏,然后输入一个名,下......
  • Lecture 06 Real-time Environment Mapping (Precomputed Radiance Transfer)
    Lecture06Real-timeEnvironmentMapping(PrecomputedRadianceTransfer)Shadowfromenvironmentlighting通常情况下要实时渲染非常困难在不同观察方向上Asamany-lightproblem:CostofShadowMapislinearlyto#lightAsasamplingproblem:Visibility项V会......
  • vue3 响应式 API:computed()
    介绍基本概念:computed()接收一个getter函数或者一个包含getter和setter函数的对象作为参数,并返回一个基于原始响应式数据计算得到的新的响应式数据对象。计算属性的值会根据其依赖的响应式数据自动更新,当依赖的数据发生变化时,计算属性的值也会自动重新计算。返......
  • 013、Vue3+TypeScript基础,computed计算属性的使用,结果会被缓存
    01、App.vue代码如下:<template><divclass="app"><h2>{{title}}</h2><!--使用了ref来获取子组件的属性--><Person/></div></template><scriptlang="ts"setupname="App"......
  • vue的computed场景
    这里主要列举一下,计算属性内是对象的各种情况data(){return{test:{id:'id1',name:'name1'}};},情况一:返回对象computed:{testValue(){returnthis.test;}}情况二:返回对象的属性computed:{testValue(){returnthis.t......
  • 16-setup()与组合式API-computed-watch
    16-setup()与组合式API-computed-watch一、setup()1、基本使用:setup()钩子是在组件中使用组合式API的入口,通常只在以下情况下使用:需要在非单文件组件中使用组合式API时。需要在基于选项式API的组件中集成基于组合式API的代码时。<script>import{ref}......
  • vue3 watch watchEffect computed 使用差别
    概论watch监听明确的数据computed监听数据并返回计算结果watchEffect重视监听过程测试代码子组件<template><divclass='box'><div>props监听测试</div>computed返回的内容的深度属性:{{configTwo.obj1&&configTwo.obj1.xxx}}<div></div......