1. Vue3 setup语法下的组件通信全景图
在Vue3的Composition API中,setup语法糖彻底改变了我们组织组件逻辑的方式。与传统选项式API相比,setup语法下的组件通信机制既有继承也有创新。通过defineProps和defineEmits这两个编译器宏,我们能够以更符合JavaScript直觉的方式处理父子组件间的数据流动。
实际开发中最常见的场景是:父组件通过props向下传递数据,子组件通过emit事件向上通信。这种单向数据流模式在setup语法中变得更加简洁。例如,子组件只需使用defineProps接收数据,而父组件通过v-on(@)监听子组件emit的自定义事件。值得注意的是,Vue3中事件名的大小写转换规则与props一致——在模板中推荐使用kebab-case,而在JavaScript中使用camelCase。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. defineProps:类型安全的属性传递
在setup语法中,defineProps是声明组件props的首选方式。与Vue2的字符串数组或对象语法不同,defineProps提供了更强大的类型推导能力。基础用法如下:
vue复制<script setup>
const props = defineProps({
title: String,
likes: Number,
isPublished: Boolean,
commentIds: Array,
author: Object,
callback: Function
})
</script>
对于TypeScript用户,defineProps支持更精确的类型标注:
vue复制<script setup lang="ts">
interface Book {
title: string
author: string
year: number
}
const props = defineProps<{
id: number
book: Book
disabled?: boolean
}>()
</script>
实际项目中,我强烈建议为每个prop添加详细的类型定义。这不仅能获得更好的IDE支持,还能在编译阶段捕获类型错误。一个常见的坑是:当prop值为
