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

Vue3中computed计算属性的高级玩法

文章目录

  • 前言
    • 本文结合vant组件库,项目开发所总结下来的知识点。告诉大家有这么个技巧。
  • 一、computed的基本用法
  • 二、实战
    • 1.结合vant组件库的Popover 气泡弹出框
    • 2.解释
      • 为什么使用数组?
      • 示例代码分析
  • 总结
    • 其他数据结构的对比
      • 1. 使用对象
      • 2. 使用数组

前言

本文结合vant组件库,项目开发所总结下来的知识点。告诉大家有这么个技巧。

一、computed的基本用法

<script setup lang="ts">
import {ref,computed} from 'vue'

const arr = ref([2,4,5,6,7,8,9,10])
// 执行computed函数,return之后计算后的值
const conputedArr = computed(() => {
	return arr.value.filter(item => item >= 2)
})
// 结果就会返回数组中大于2的元素

</script>

二、实战

1.结合vant组件库的Popover 气泡弹出框

在这里插入图片描述
我的组件代码


<script setup lang="ts">
import { computed, ref } from 'vue'
import type { OrderItem } from '@/types/order'

const props = defineProps<{ item: OrderItem }>()
const showPopover = ref(false)
const actions = computed(() => [
  { text: '查看处方', disabled: !props.item.prescriptionId },
  { text: '删除订单' }
])
const onSelect = () => {
  //
}
</script>
 <template>
	<div class="foot" v-if="item.status === OrderType.ConsultComplete">
      <div class="more">
        <van-popover
          placement="top-start"
          v-model:show="showPopover"
          :actions="actions"
          @select="onSelect"
        >
          <template #reference> 更多 </template>
        </van-popover>
      </div>
  </div>
</template>

<style>
	.....
</style>

很多小伙伴很疑惑为啥这里computed语法可以这样写

// 计算多个值
computed(() =>[
	{...},
	{...}
	
])

2.解释

Vue 3 组合式 API 中 computed 返回数组的使用场景与原理

为什么使用数组?

在 Vue 3 的组合式 API 中,computed 函数可以返回任意类型的值(基本类型、对象、数组等)。当需要表示一组相似的动作或配置项时,使用数组是自然且高效的选择,因为:

  1. 动态迭代渲染
    数组可以通过 v-for 指令直接遍历,动态生成 UI 元素(如按钮、菜单项等)。
  2. 结构化数据
    数组中的每个元素遵循相同的格式(例如 { text, disabled }),便于统一处理逻辑。
  3. 响应式依赖
    当数组中的某个属性(如 disabled)依赖响应式数据时,computed 会自动追踪变化并更新。

示例代码分析

const actions = computed(() => [
  { text: '查看处方', disabled: !props.item.prescriptionId },
  { text: '删除订单' }
]);

解释:
数组元素:每个对象描述一个动作的配置(如按钮的文本和禁用状态)。
响应式逻辑:disabled 的值依赖 props.item.prescriptionId,当该值变化时,计算属性会重新计算。
默认行为:未显式定义 disabled 的动作默认为 false(即不禁用)。

总结

其他数据结构的对比

1. 使用对象

  • 适用于单个动作的场景:
const singleAction = computed(() => ({
  text: '查看处方',
  disabled: !props.item.prescriptionId
}));

2. 使用数组

  • 适用于多个动作的场景:
const actions = computed(() => [
  { text: '动作1', disabled: false },
  { text: '动作2', disabled: true }
]);

选择使用哪种数据结构取决于你的具体需求和应用场景。在需要表示一组相似的项目时,数组是非常自然和方便的选择。


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

相关文章:

  • Vue3基础之响应式原理
  • 【java】StringJoiner
  • MyBatis-Plus分页控件使用及使用过程发现的一个坑
  • 【形态学操作中的开运算和闭运算详细讲解】
  • 系统架构设计师—系统架构设计篇—特定领域软件体系结构
  • 为AI聊天工具添加一个知识系统 之141 设计重审 之6 文章学 之 引言 之0 总括生命的形式:意识形态 诗和逻辑
  • WPF基础知识1-20
  • LeetCode 每日一题 1328. 破坏回文串
  • 机器学习数学基础:42.AMOS 结构方程模型(SEM)分析的系统流程
  • Primer - 自适应学习,AI学习工具
  • 从案例分析看微型工业计算机在智能社区中的卓越表现
  • JavaScript网页设计案例:打造交互式用户体验
  • Stream特性(踩坑):惰性执行、不修改原始数据源
  • Expo知识框架大全详解
  • 不同开发语言之for循环的用法、区别总结
  • Spring Cloud之注册中心之Nacos负载均衡
  • 目标检测中的核心评估指标mAP详解
  • Deeplabv3+改进3:在主干网络中添加NAMAttention|助力涨点!
  • 批量在 Word 的指定位置插入页,如插入封面、末尾插入页面
  • Java基础——java8+新特性——方法引用(::)