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

vue计算属性computed的详解

文章目录

  • 1. 计算属性computed
  • 2. 仅读取
  • 3. get读取和set设置
  • 4. 传递参数
  • 5. 使用场景
  • 6. computed和methods的区别
  • 7. computed和watch的区别

1. 计算属性computed

在vue中,模板标签内写表达式非常便利,但是在模板中放入太多的逻辑会让模板过重且难以维护(屎山代码难于阅读)。这个时候我们的计算属性优势就出来了。
计算属性必须返回一个值,值的结果会被缓存,除非依赖的响应式 property 变化才会重新计算,如果某个依赖在该实例范畴之外,则计算属性是不会被更新的。

2. 仅读取

如下例子:handleDouble依赖了total,只有total更新后,handleDouble才会重新计算,并返回一个新值。

<template><div class="home_box"><h1>{{ handleDouble }}</h1></div>
</template><script>
export default {name: 'Home',computed: {handleDouble() {return this.total * 2}},data() {return {total: 10}}
}
</script>

3. get读取和set设置

如下例子:在mounted生命周期中,我给handleDouble赋值了数字6,在template模板中,最终显示的却是数字14,这是因为handleDouble的set方法,会触发total的set方法,从而触发handleDouble的get方法,重新计算handleDouble的值。

<template><div class="home_box"><h1>{{ handleDouble }}</h1></div>
</template><script>
export default {name: 'Home',computed: {handleDouble: {get() {return this.total * 2},set(value) {this.total = value + 1}}},data() {return {total: 10}},mounted() {this.handleDouble = 6}
}
</script>

4. 传递参数

如下例子:computed也是可以传递参数的,采用闭包的方式,返回一个函数,该函数接收的参数就是你传递的参数。

<template><div class="home_box"><h1>{{ checkcCloudless(false) }}</h1></div>
</template><script>
export default {name: 'Home',computed: {checkcCloudless() {return (value) => {return value ? '晴天' : '阴天'}}}
}
</script>

5. 使用场景

计算属性使用场景很多。比如:

  1. 后端返回了一个状态,值为false/true或0/1,需要你转成文字是和否
  2. 数字/日期需要格式化
  3. v-if、v-show的判断条件复杂时

如下例子,根据result的值,显示不同的文字。

<template><div class="home_box"><h1>{{ checkcCloudless }}</h1><button @click="switchCloudless">切换天气</button></div>
</template><script>
export default {name: 'Home',computed: {checkcCloudless() {return this.result ? '晴天' : '阴天'}},data() {return {result: false}},methods: {switchCloudless() {this.result = !this.result}}
}
</script>

6. computed和methods的区别

  • computed:注重结果
    • 主要用来逻辑运算,防止模板过重
    • 有缓存
    • 监听,有get和set两个方法,get必须return
  • methods:注重过程
    • 主要用做事件的处理函数,return不是必须的
    • 没有缓存

7. computed和watch的区别

  • computed:
    • 主要用来逻辑运算,防止模板过重
    • 依赖其它数据
    • 有缓存,是基于它们的响应式依赖进行缓存的
    • 只会在其依赖项发生改变时才会重新计算
    • 监听,有get和set两个方法,get必须return
  • watch:
    • 主要用于监听数据的变化,并执行函数
    • 监听的函数接收两个参数,第一个参数是最新的值,第二个参数是变化之前的值
    • 监听的函数执行次数取决于监听的属性值变化多少次
    • 监听的函数是立即执行的,监听的函数只执行一次
    • 监听的函数中,可以配置2个属性
      • immediate:是否立即执行
      • deep:是否深度监听

本次分享就到这儿啦,我是鹏多多,如果您看了觉得有帮助,欢迎评论,关注,点赞,转发,我们下次见~

往期文章

  • css使用aspect-ratio制作4:3和9:16和1:1等等比例布局
  • Web前端页面开发阿拉伯语种适配指南
  • flutter-使用extended_image操作图片的加载和状态处理以及缓存和下载
  • flutter-制作可缩放底部弹出抽屉评论区效果
  • flutter-实现Tabs吸顶的PageView效果
  • Vue2全家桶+Element搭建的PC端在线音乐网站
  • 助你上手Vue3全家桶之Vue3教程
  • 超详细!Vue的九种通信方式
  • 超详细!Vuex手把手教程
  • 使用nvm管理node.js版本以及更换npm淘宝镜像源
  • vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令

个人主页

  • CSDN
  • GitHub
  • 掘金

相关文章:

  • C语言的函数调用,允许参数缺省和乱序
  • python----下载安装,配置环境
  • mkdir: cannot create directory ‘gitlab-stu’: No space left on device
  • Python基于Django的高校社团学生会管理系统【附源码、文档说明】
  • 【QQ音乐】sign签名| data参数加密 | AES-GCM加密 | webpack实战 (下)
  • 前端工程化 Source Map(源码映射)详解
  • React 微应用接入:qiankun 深度集成实战
  • 音视频中的复用器
  • mac笔记本如何快捷键截图后自动复制到粘贴板
  • 从零开始的数据结构教程(六) 贪心算法
  • 【HTML/CSS面经】
  • 华为OD机试真题——简单的自动曝光平均像素(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • OCC笔记:面、边的方向(TopAbs_Orientation)
  • Spring Security架构中过滤器的实现
  • 前端ul-image的src接收base64快捷写法
  • 关于 smali:2. 从 Java 到 Smali 的映射
  • 测试策略:AI模型接口的单元测试与稳定性测试
  • Practice 2025.5.29 —— 二叉树进阶面试题(1)
  • NW907NW918美光固态闪存NW920NW930
  • Docker安装
  • 成都建立网站的公司网站/百度电话查询
  • 织梦网站英文版怎么做/谷歌应用商店
  • 第三方商城网站建设/长春seo结算
  • 江西微网站建设/黑帽seo工具
  • 做网站和做app有什么不同/如何做好宣传推广
  • 做外贸 访问国外网站/sem竞价教程