Vue组件传值(一天一个小知识点)
可能很多人都是觉得写这些文章是没有什么用的,有的人甚至觉得,写零碎的知识点没什么看头,但是就我实际的工作经验来说,我觉得,很多时候,写零碎的知识点我会像记录我的生活一样记录我的技术点,而且我写一遍我就可以记得住
ok,今天的主角是defineProps,它是一个编解码器函数,用于在单文件组件中定义组件的props。它是在setup标签内使用的一个编译时语法糖,用来声明组件接收的属性。通过defineProps,可以指定哪些数据应该作为prop被传递给组件,并且可以为这些prop定义类型检查和其他选项。
<script setup>
import { defineProps } from 'vue'
// 定义接收的 props
const props = defineProps({
title: String,
count: Number,
isActive: Boolean
})
</script>
<template>
<div>
<h1>{{ title }}</h1>
<p>Count: {{ count }}</p>
<p>Status: {{ isActive ? 'Active' : 'Inactive' }}</p>
</div>
</template>
在这个例子中,组件接收三个 prop:title、count 和 isActive,它们分别对应字符串、数字和布尔值。
你还可以为每个 prop 提供更详细的配置,比如默认值、是否必需等:
<script setup>
import { defineProps } from 'vue'
const props = defineProps({
title: {
type: String,
required: true // 必须提供此 prop
},
count: {
type: Number,
default: 0 // 如果没有提供此 prop,则使用默认值 0
},
isActive: {
type: Boolean,
default: false // 默认值为 false
}
})
</script>
<template>
<div>
<h1>{{ title }}</h1>
<p>Count: {{ count }}</p>
<p>Status: {{ isActive ? 'Active' : 'Inactive' }}</p>
</div>
</template>
类型推断
当使用 TypeScript 编写 Vue 组件时,defineProps 还可以帮助进行类型推断,确保 props 的类型安全:
<script setup lang="ts">
import { defineProps } from 'vue'
interface Props {
title: string;
count: number;
isActive?: boolean; // 可选 prop
}
const props = defineProps<Props>();
</script>
<template>
<div>
<h1>{{ title }}</h1>
<p>Count: {{ count }}</p>
<p>Status: {{ isActive ? 'Active' : 'Inactive' }}</p>
</div>
</template>
在这个例子中,我们使用了 TypeScript 接口来定义 props 的结构,这样可以在开发过程中获得更好的类型检查和支持。
通过这种方式,Vue 3 的 defineProps 不仅简化了代码编写,还增强了代码的可读性和健壮性。