基于类型的声明接收props

在 Vue 3 中,除了运行时声明这种常见方式,还可以通过基于类型的声明、解构赋值等方式来接收 props,下面为你详细介绍:

1. 基于类型的声明

这种方式借助 TypeScript 的类型系统来定义 props,具有类型检查和代码提示的优势,让代码更加健壮和易于维护。

示例代码
TypeScript 复制代码
<template>
  <div>
    <p>用户名: {{ username }}</p>
    <p>是否活跃: {{ isActive }}</p>
  </div>
</template>

<script setup lang="ts">
// 定义 Props 接口来描述 props 的类型
interface Props {
  username: string;
  isActive?: boolean;
}

// 使用泛型指定 props 的类型
const props = defineProps<Props>();
</script>
代码解释
  • 定义了 Props 接口,其中 username 是必需的字符串类型,isActive 是可选的布尔类型。
  • defineProps<Props>() 通过泛型指定 props 的类型,从而完成 props 的接收。

2. 解构赋值

可以对 defineProps 返回的 props 对象进行解构赋值,方便在模板中直接使用 props。不过需要注意的是,直接解构会失去响应式,可使用 toRefs 来解决这个问题。

示例代码
TypeScript 复制代码
<template>
  <div>
    <p>标题: {{ title }}</p>
    <p>描述: {{ description }}</p>
  </div>
</template>

<script setup>
import { toRefs } from 'vue';

// 运行时声明 props
const props = defineProps({
  title: {
    type: String,
    required: true
  },
  description: {
    type: String,
    default: '暂无描述'
  }
});

// 使用 toRefs 解构 props 以保持响应式
const { title, description } = toRefs(props);
</script>
代码解释
  • 首先使用运行时声明的方式定义 props。
  • 然后使用 toRefs 对 props 进行解构,这样 title 和 description 就保持了响应式,当父组件传递的 props 发生变化时,子组件能够相应更新。

3. 结合 withDefaults 辅助函数

withDefaults 辅助函数可用于给基于类型声明的 props 设置默认值,增强了类型声明方式的灵活性。

示例代码
TypeScript 复制代码
<template>
  <div>
    <p>颜色: {{ color }}</p>
    <p>大小: {{ size }}</p>
  </div>
</template>

<script setup lang="ts">
import { withDefaults } from 'vue';

interface Props {
  color: string;
  size?: number;
}

// 使用 withDefaults 为 props 设置默认值
const props = withDefaults(defineProps<Props>(), {
  size: 16
});
</script>
代码解释
  • 先定义 Props 接口来描述 props 的类型。
  • 使用 withDefaults 函数包裹 defineProps<Props>(),并传入一个对象来设置默认值,这里为 size 设置了默认值 16。
相关推荐
拆房老料2 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
VX_bysjlw9852 小时前
数码设备销售网站设计与实现39138-计算机毕设原创(免费领源码+带部署教程)
java·vue.js·spring boot·mysql·tomcat·mybatis·idea
Solis程序员2 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明2 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8882 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
粥里有勺糖3 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
xy34534 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计
不停喝水4 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
一水鉴天5 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
栖凤5 小时前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python