uniapp defineprops 的用法详解
我在学习uniapp时遇到了defineprops的使用问题,想请教下具体用法:
- defineprops的基本语法和参数该怎么写?
- 如何定义默认值、类型校验和必填项?
- 父子组件传值时,defineprops接收的数据在子组件中如何正确使用?
- 和vue2的props选项相比,defineprops在uniapp中有哪些差异或注意事项?
- 能否给一个完整的代码示例说明典型场景下的用法?
2 回复
uniapp中defineProps用于定义组件的props,接收类型声明对象。支持String、Number、Boolean、Array、Object等类型,可设置默认值和校验规则。
示例:
defineProps({
title: String,
count: {
type: Number,
default: 0
}
})
在模板中直接使用props数据即可。
UniApp 中的 defineProps 用于在 Vue 3 的 Composition API 中声明组件的 props,适用于使用 <script setup> 语法。它提供类型推断和默认值设置,简化 props 定义。
基本用法
在 <script setup> 中直接使用 defineProps 定义 props:
<script setup>
// 定义 props
const props = defineProps({
title: String,
count: {
type: Number,
default: 0
},
isActive: Boolean
});
// 使用 props
console.log(props.title);
</script>
使用 TypeScript 类型注解
通过泛型提供类型支持(推荐在 TypeScript 项目中使用):
<script setup lang="ts">
interface Props {
title: string;
count?: number;
isActive: boolean;
}
const props = defineProps<Props>();
</script>
设置默认值
使用 withDefaults 编译器宏为 TypeScript 类型 props 设置默认值:
<script setup lang="ts">
interface Props {
title?: string;
count: number;
}
const props = withDefaults(defineProps<Props>(), {
title: '默认标题',
count: 10
});
</script>
注意事项
- 仅适用于
<script setup>:传统 Options API 使用props选项。 - 无需导入:
defineProps是编译器宏,自动可用。 - 响应性:props 是响应式的,但不要直接解构(使用
toRefs如需解构)。 - 类型检查:在开发模式下,UniApp 会验证传递的 props 类型。
示例:完整组件
<template>
<view>
<text>{{ title }}</text>
<text>{{ count }}</text>
<text>{{ isActive ? '激活' : '未激活' }}</text>
</view>
</template>
<script setup lang="ts">
interface Props {
title: string;
count?: number;
isActive: boolean;
}
const props = withDefaults(defineProps<Props>(), {
count: 5,
isActive: false
});
</script>
通过 defineProps,可以高效管理组件属性,提升代码可读性和类型安全。

