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

Vue开发中计算属性与方法调用之间的区别与联系

文章目录

    • 一 概述
    • 二 核心区别
    • 三 联系
    • 四 使用原则

一 概述

在 Vue 中,计算属性(computed) 和 方法(methods) 都可以用于处理数据逻辑,但它们的核心区别在于 缓存机制 和 触发方式 。

计算属性示例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>demo</title>
</head>

<body>
    <!-- 使用computed -->
    <div id="app">
        <button v-on:click="a++">a+1</button>
        <button v-on:click="b++">b+1</button>
        <p>number + a = {{add1}}</p>
        <p>number + b = {{add2}}</p>
    </div>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script>
        const vm = Vue.createApp(
            {
                data() {
                    return {
                        a: 0,
                        b: 0,
                        number: 30
                    };
                },
                computed: {
                    add1: function() {
                        console.log("This is add1 computed function: " +this.a);
                        return this.a + this.number;
                    },
                    add2: function() {
                        console.log("This is add2 computed function: " +this.b);
                        return this.b + this.number;
                    }
                }
            }
        ).mount("#app");
    </script>
</body>

</html>

页面加载时,控制台打印结果如下:

This is add1 computed function: 0
This is add2 computed function: 0

连续点击2次a+1按钮,再点击一次b+1按钮,控制台运行结果如下:
![运行结果(https://i-blog.csdnimg.cn/direct/290985ee437f4bab9bee11ff72251a02.png)
方法调用示例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>demo</title>
</head>

<body>
    <!-- 使用methods -->
    <div id="app">
        <button v-on:click="a++">a+1</button>
        <button v-on:click="b++">b+1</button>
        <p>number + a = {{add1()}}</p>
        <p>number + b = {{add2()}}</p>
    </div>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script>
        const vm = Vue.createApp(
            {
                data() {
                    return {
                        a: 0,
                        b: 0,
                        number: 30
                    };
                },
                methods: {
                    add1: function() {
                        console.log("This is add1 method:" + this.a);
                        return this.a + this.number;
                    },
                    add2: function() {
                        console.log("This is add2 method:" + this.b);
                        return this.b + this.number;
                    }
                }
            }
        ).mount("#app");
    </script>
</body>

</html>

页面加载时,控制台打印结果如下:

This is add1 computed function: 0
This is add2 computed function: 0

连续点击2次a+1按钮,再点击一次b+1按钮,控制台运行结果如下:
运行结果

二 核心区别

特性计算属性(computed)方法(methods)
缓存机制基于依赖的响应式数据自动缓存,依赖不变时直接返回缓存值。无缓存,每次组件渲染时都会执行。
触发时机仅当依赖的响应式数据变更时重新计算。每次渲染或调用时都会执行。
调用方式在模板中直接当作属性使用(无需调用)。 计算属性的调用不能使用括号,例如 add1、add2。必须显式调用,需要加上括号,例如 add1()、add2()。
适用场景复杂逻辑、依赖其他数据且需缓存的场景(如过滤、计算衍生值)。事件处理、不依赖缓存的动态操作(如提交表单)。

三 联系

共同点

  • 都可以处理数据逻辑,返回衍生值。
  • 都能访问组件实例的 data、props 等属性。

互补场景

  • 计算属性适合 高开销、依赖明确 的逻辑(如过滤列表、复杂计算)。
  • 方法适合事件驱动或无需缓存的操作(如表单提交、动态参数生成)。

四 使用原则

计算属性相较于方法更加优化,但并不是什么情况下都可以使用计算属性,在触发事件时还是使用对应的方法。计算属性一般在数据量比较大、比较耗时的情况下使用(例如搜索),只有虚拟DOM 与真实 DOM 不同的情况下才会执行 computed。如果你的业务实现不需要有缓存,计算属性可以使用方法来代替。
优先使用计算属性 :
当需要根据响应式数据动态生成值,且该值会被多次使用或计算成本较高时。
使用方法 :
当逻辑不依赖响应式数据,或需要显式触发(如按钮点击事件)。


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

相关文章:

  • LeNet-5卷积神经网络详解
  • 【沐渥科技】氮气柜日常如何维护?
  • QT与网页显示数据公式的方法
  • 企业未来 AI 应用中的工作重心
  • 在VMware上部署【Rocky Linux】保姆级
  • React 中的 useReducer Hook 是什么?何时使用?
  • 【外部链接跳转uniapp开发的App内指定页面】实现方案
  • 蓝桥杯省赛真题C++B组2024-握手问题
  • Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理
  • 【Axure资料】110套优质可视化大屏模板+图表组件+科技感元件等
  • 【Javascript网页设计】个人简历网页案例
  • git报错:error: RPC failed; curl 16 Error in the HTTP2 framing layer
  • stm32week6
  • 华为OD机试-抢7游戏(Java 2024 D卷 100分)
  • ⭐算法OJ⭐经典题目分类索引(持续更新)
  • Tomcat+Servlet运行后出现404错误解决方案
  • 【华为OD机考真题】- 星际篮球争霸赛(Java)
  • 蓝桥杯 商品库存管理
  • 《Android应用性能优化全解析:常见问题与解决方案》
  • llamafactory 微调教程