第十四节——计算属性computed

一、概念

如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed

computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过或者父组件传递的props中的数据通过计算得到的值。

如果computed属性属性值是函数,那么默认会走get方法;函数的返回值就是属性的属性值;在computed中的,属性都有一个get和一个set方法,当数据变化时,调用set方法

1、监听值未在data中定义,以return返回值形式;

2、计算属性变量在computed中定义,属性监听在data中定义。

3、计算属性默认只有get来读取,手动修改计算属性时,会触发手写的set函数(不推荐)。

4、计算属性的值会被缓存,只有实例中相关依赖值改变时,才重新计算,性能好但不适合做异步请求。

5、计算属性是声明式的描述一个值依赖了其他值,依赖的值改变后重新计算结果更新DOM。属性监听的是定义的变量,当定义的值发生变化时,执行相对应的函数

二、基本使用

复制代码
<template>
  <div>
    计算属性
    <!-- 可以直接使用 -->
    {{arrLength}}
  </div>
</template>
<script>
  export default {

    data () {
      return {
        arr: [1,2,3,4]
      }
    },

    /**
   * 计算属性放在computed对象里面
   * 里面存放的是方法 方法的名字就是这个计算属性的名字
   * 方法的返回值就是计算属性的返回值
   * 只有内部数据变化才会重新计算
   */
    computed: {
      /**
     * 计算arr数组的length
     */
      arrLength () {
        // return的值就是arrLength的值
        return this.arr.length
      }
    }
  }
</script>

三、修改计算属性(一般来说计算属性不需要修改)

复制代码
<template>
  <div>
    计算属性
    <!-- 可以直接使用 -->
    {{ name }}
    <button @click="updateName">修改名字</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      firstName: "张",
      lastName: '三'
    };
  },

  /**
   * 可写计算属性
   * 计算属性默认是只读的。
   * 当你尝试修改一个计算属性时,你会收到一个运行时警告。
   * 只在某些特殊场景中你可能才需要用到"可写"的属性,
   * 你可以通过同时提供 getter 和 setter 来创建
   * 不推荐直接使用
   */
  computed: {
    /**
     * 计算arr数组的length
     */
    name: {
      // getter
      get() {
        return this.firstName + " " + this.lastName;
      },
      // setter
      set(newValue) {
        // 注意:我们这里使用的是解构赋值语法
        [this.firstName, this.lastName] = newValue.split(" ");
      },
    },
  },

  methods: {
    updateName () {
      this.name = '李 四'
    }
  }
};
</script>
相关推荐
Swift社区几秒前
ArkTS Web 组件里,如何通过 javaScriptProxy 让 JS 同步调用原生方法
开发语言·前端·javascript
小和尚敲木头2 分钟前
记录一次vue3中this引发的开发没有问题,生产发生问题的分析
前端·vue
秃了也弱了。5 分钟前
FASTJSON库:阿里出品java界json解析库,使用与踩坑记录
java·开发语言·json
TttHhhYy6 分钟前
小记,antd design vue的下拉选择框,选项部分不跟着滑动走,固定在屏幕某个部位,来改
前端·vue.js·sql
小二·7 分钟前
Python Web 全栈开发实战教程:基于 Flask 与 Layui 的待办事项系统
前端·python·flask
光影少年8 分钟前
vite为什么速度快?
前端·学习
万物得其道者成17 分钟前
用 Python + MySQL + Web 打造我的私有 Apple 设备监控面板
前端·python·mysql
安全渗透Hacker18 分钟前
参数未校验导致的DOS(服务拒绝)问题典型场景
java·安全·web安全·网络安全·安全性测试
Hi_kenyon26 分钟前
快速入门VUE与JS(二)--getter函数(取值器)与setter(存值器)
前端·javascript·vue.js
海云前端130 分钟前
前端面试加分技巧:文本省略 + Tooltip 优雅实现,附可直接复用代码(求职党必看)
前端