Vue3 defineProps使用指南

defineProps是Vue3组合式API( < script setup > )中专用来声明组件接受父组件传值的宏函数,无须导入,直接使用。他的核心:声明子组件要接收的props、定义类型校验、设置默认值、必填项。

一、基础用法(最简单)

直接声明props名称数组,适合简单场景:

vue 复制代码
<!-- 子组件 Child.vue --> 
<script setup> 
// 基础用法:只声明名称 
defineProps(['title', 'count']) 
</script> 
<template>
    <div>{{ title }}</div>
    <div>{{ count }}</div>
</template>

父组件使用

vue 复制代码
<!-- 父组件 parent.vue -->
<Child title="我是标题" :cout="10" />

二、带校验的用法(推荐)

可以指定类型、必填、默认值,开发中很常见

vue 复制代码
<script setup> 
defineProps({ 
    // 基础类型校验 String/Number/Boolean/Array/Object/Function 
    title: { 
        type: String, 
        required: true, // 必填项 
        default: '默认标题' // 默认值 
    }, 
    count: { 
        type: Number, 
        default: 0 
    }, 
    // 多个可能的类型 
    id: [String, Number], 
    // 自定义校验函数 
    status: { 
        validator(value) { 
            // 必须是这几个值之一 
            return ['success', 'error', 'warning'].includes(value) 
        }
    } 
}) </script>

三、TS类型写法(Vue3+TypeScript)

如果用TS,推荐泛型写法,类型更安全

vue 复制代码
<script setup>
import {widthDefault} from "vue"
// 定义接口(推荐)
interface IProps {
    title: string
    count?: number  //可选
    list?: string[]
}

// 泛型+默认值
const props = withDefault(defineProps<IProps>(), {
    count: 0,
    list: ()=>[]
});
</script>

四、获取和使用props变量

widthDefault或者defineProps都会返回一个响应式对象,可以接收并使用

vue 复制代码
<script setup>
import { toRefs } from "vue"
// 接收 props 对象 
const props = defineProps(['title', 'count']);
// 1.直接使用props.xxx方式使用
console.log(props.title) 
console.log(props.count)

// 2.通过使用toRefs的方式解构props
// 注意不能直接结构props, 会丢失响应式
const {title, count} = toRefs(props);
console.log(title.value)
console.log(count.value)
</script>
相关推荐
LIO1 小时前
Pinia 极简指南:Vue 3 官方状态管理库
前端·vue.js
Ruihong2 小时前
手写 React 对比 VuReact 编译:真正省下来的是维护成本
vue.js·react.js·面试
俺不会敲代码啊啊啊2 小时前
el-table实现行拖拽(包含展开项)
前端·vue.js·typescript
架构源启2 小时前
2026 进阶篇:Spring Boot响应式编程 + Spring AI 1.1.4 流式实战 + Vue前端完整实现(避坑指南)
java·前端·vue.js·人工智能·spring boot·spring·ai编程
OpenTiny社区2 小时前
还在手写 AI 聊天页?这款 Vue3 气泡组件,直接搞定流式对话!
前端·vue.js·ai编程
涵涵(互关)3 小时前
语法大全-only-writer
开发语言·前端·vue.js·typescript
FlyWIHTSKY4 小时前
router-viiew没有滚动条,如何修复
前端·vue.js·elementui
hhzz4 小时前
记录微信小程序tabbar不显示问题:uni-app Vue 3 自定义 tabBar 不渲染
vue.js·微信小程序·uni-app
靳向阳4 小时前
【无标题】
前端·javascript·vue.js