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

vue3计算属性

1. 使用计算属性来描述依赖响应式状态的复杂逻辑

<script setup>
import { reactive, computed } from 'vue'

const author = reactive({
  name: 'John Doe',
  books: [
    'Vue 2 - Advanced Guide',
    'Vue 3 - Basic Guide',
    'Vue 4 - The Mystery'
  ]
})

// 一个计算属性 ref
const publishedBooksMessage = computed(() => {
  return author.books.length > 0 ? 'Yes' : 'No'
})
</script>

<template>
  <p>Has published books:</p>
  <span>{{ publishedBooksMessage }}</span>
</template>

//1.computed()方法接收到的是一个ref,所以可以通过publishedBooksMessage.value访问
//2.当author.books 改变时,publishedBooksMessage的值也会更新

2. 上面这段代码也可以使用方法来完成,但是方法和计算属性有一个重大区别

计算属性会缓存,只有值改变时才会更新(也就是author.books 改变时,publishedBooksMessage的值才会变,不然一直返回之前计算的结果)

但是方法不会缓存,所以每一次重新渲染时都会重新执行一次,很耗性能

3. 计算属性是只读的,只有在特殊场景才会去改变它的值

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

const firstName = ref('John')
const lastName = ref('Doe')

const fullName = computed({
  // getter
  get() {
    return firstName.value + ' ' + lastName.value
  },
  // setter
  set(newValue) {
    // 注意:我们这里使用的是解构赋值语法
    [firstName.value, lastName.value] = newValue.split(' ')
  }
})
</script>

//当你再运行 fullName.value = 'John Doe' 时,setter 会被调用而 firstName 和 lastName 会随之更新。

4. 可以使用计算属性返回上一个值

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

const count = ref(2)

// 这个计算属性在 count 的值小于或等于 3 时,将返回 count 的值。
// 当 count 的值大于等于 4 时,将会返回满足我们条件的最后一个值
// 直到 count 的值再次小于或等于 3 为止。
const alwaysSmall = computed((previous) => {
  if (count.value <= 3) {
    return count.value
  }

  return previous
})
</script>


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

相关文章:

  • 【Go】Go Gin框架初识(一)
  • Hadoop3.x 万字解析,从入门到剖析源码
  • 如何禁用 PySpark 在运行时打印信息
  • Termora跨平台 SSH/SFTP/Terminal 客户端工具
  • 【声音场景分类--论文阅读】
  • 【Spring Boot 应用开发】-04-01 自动配置-数据源-连接池
  • G1原理—5.G1垃圾回收过程之Mixed GC
  • 报告分享 | 大语言模型安全和隐私研究综述
  • 使用 WPF 和 C# 绘制覆盖网格的 3D 表面
  • CF 368A.Sereja and Coat Rack(Java实现)
  • uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?
  • next-auth v5 结合 Prisma 实现登录与会话管理
  • NVIDIA PyTorch Docker 镜像安装
  • RustDesk ID更新脚本
  • macos 一直报错 XXX 将对你的电脑造成伤害。你应该将它移到废纸篓
  • VSCode开发STM32,并支持C++
  • Spring官网构建Springboot工程
  • 【llama_factory】qwen2_vl训练与批量推理
  • DAMA GDPA 备考笔记(二)
  • 3.flask蓝图使用
  • 【优选算法篇】--双指针篇
  • C# PDF下载地址转图片(Base64 编码)
  • Ubuntu/centOS 如何安装 OpenGL
  • Web前端------HTML多媒体标签之图片标签
  • 开始使用Panuon开源界面库环境配置并手写VS2019高仿界面
  • 网安——计算机网络基础