当前位置: 首页 > article >正文

Vue: computed 计算属性

在Vue中,computed属性是用于计算和返回基于其他响应式数据的值的功能。

适合在模板中使用,因为能够根据依赖的数据自动更新

当依赖的数据变化时,computed属性会重新计算,并且会将结果缓存,以提高性能。

computed的用途

  1. 数据处理:对原始数据进行加工处理,比如格式化、拼接等。
  2. 动态计算:根据多个响应式数据计算出一个新值。
  3. 避免重复计算computed属性会缓存结果,只有依赖的值发生变化时才会重新计算,这样可以提高性能。

computed的特性

  • 响应式computed属性是响应式的,会跟踪依赖的变化。
  • 缓存:如果依赖的值没有变化computed属性将返回缓存的结果,而不重新计算。
  • 可以定义getter和setter:使用对象形式时,可以同时定义getter和setter方法,允许对计算属性进行读写操作。
    • 不写setter 默认是只读,当你尝试修改一个计算属性时,你会收到一个运行时警告。需要用到可写的情况,可以通过同时提供 getter 和 setter 来创建可写计算属性

示例

<template>
  <div>
    <h1>用户设置</h1>
    <p>全名: {{ fullName }}</p>
    <input v-model="fullNameInput" placeholder="输入全名">
    <button @click="resetName">重置姓名</button>
  </div>
</template>

<script>
import { ref, computed } from 'vue';

export default {
  setup() {
    // 定义响应式数据
    const firstName = ref('');
    const lastName = ref('');

    // 定义计算属性
    const fullName = computed({
      // getter
      get() {
        return `${firstName.value} ${lastName.value}`;
      },
      // setter
      set(newValue) {
        const names = newValue.split(' ');
        firstName.value = names[0] || ''; // 设置名字
        lastName.value = names[1] || ''; // 设置姓氏
      }
    });

    // 为了方便输入全名,定义一个用于双向绑定的响应式数据
    const fullNameInput = ref('');

    // 当全名输入框的内容变化时,更新计算属性
    watch(fullNameInput, (newValue) => {
      fullName.value = newValue; // 更新计算属性的值
    });

    // 重置姓名的函数
    const resetName = () => {
      firstName.value = '';
      lastName.value = '';
      fullNameInput.value = ''; // 清空输入框
    };

    return {
      fullName,
      fullNameInput,
      resetName
    };
  }
}
</script>
  1. 响应式数据
    • firstNamelastName用于存储用户的名字和姓氏。
    • fullNameInput是一个响应式数据,用于双向绑定输入框的内容。
  2. 计算属性fullName
    • getter:返回拼接后的全名。
    • setter:允许通过全名更新firstNamelastName。当全名输入时,将其分割成名字和姓氏。
  3. 输入框
    • 当用户在输入框中输入全名时,fullNameInput的变化会触发watch,从而更新计算属性fullName
  4. 重置功能
    • resetName方法可以清空名字、姓氏和输入框的内容。

computed的优势

计算属性有几个显著的优势:

  1. 缓存机制:计算属性的结果会被缓存,只有当依赖的数据发生变化时才会重新计算,这提高了性能。
  2. 响应式:计算属性是响应式的,当依赖的数据发生变化时,计算属性会自动更新。
  3. 易于维护:通过将复杂的逻辑封装在计算属性中,可以避免在模板中使用复杂的表达式,从而简化模板的维护。

computed与methods对比

computed属性

  • 缓存特性computed属性会根据其依赖的响应式数据进行缓存。只有当依赖的数据改变时,计算属性才会重新计算。这意味着,如果你在模板中多次使用同一个计算属性,Vue会只计算一次并缓存结果,直到依赖项发生变化。
  • 性能优化:由于computed属性的结果是缓存的,因此在需要频繁访问相同计算结果时,它比methods更高效。例如,当你在模板中多次引用一个复杂的计算属性时,使用computed会避免重复计算,从而提高性能。

methods

  • 无缓存:每次调用methods时,函数都会被执行,即使其依赖的数据没有改变。这意味着,如果你在模板中多次调用同一个方法,Vue会每次都重新执行这个方法。
  • 适用于操作methods主要用于执行操作,如提交表单、执行异步请求等,而不是用于计算和返回值。

http://www.kler.cn/a/413132.html

相关文章:

  • 如何搭建一个小程序:从零开始的详细指南
  • Elasticsearch与CCS跨集群搜索:深入讲解与实战演练
  • vue3 数字滚动插件vue3-count-to
  • 聊聊Flink:这次把Flink的触发器(Trigger)、移除器(Evictor)讲透
  • 【公益接口】不定时新增接口,仅供学习
  • CSGO游戏搬砖党如何应对上海Major
  • 11.27 深度学习-损失函数+BP算法
  • 高级 SQL 技巧:提升数据库操作效率与灵活性
  • xiaolin coding 图解网络笔记——IP 篇
  • 【算法】快速求出 n 最低位的 1
  • 【大数据学习 | Spark-SQL】Spark-SQL编程
  • 如何做好一份技术文档?
  • 新型大语言模型的预训练与后训练范式,阿里Qwen
  • 网络安全审计机制与实现技术
  • Unity3D Lua如何支持面向对象详解
  • 使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程
  • 摄像头原始数据读取——gstreamer(gst_parse_launch)
  • UI设计-色彩、层级、字体、边距(一)
  • java脚手架系列16-AI大模型集成
  • 使用Hutool读取大Excel
  • C++学习日记---第14天(蓝桥杯备赛)
  • 前端实现把整个页面转成PDF保存到本地(DOM转PDF)
  • 梧桐数据库的高效索引技术分析
  • Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)
  • 前端框架 react 性能优化
  • 【网络安全设备系列】10、安全审计系统