Vue 2 Options API 中 props 用于父传子数据,支持类型校验、必填约束、默认值及自定义 validator;对象写法推荐,type 为数组时需函数返回默认值,props 不可直接修改。

在 Vue 2 的 Options API 中,父组件通过 props 向子组件传递数据,子组件通过 props 选项声明并接收,同时支持基础类型校验、必填约束、默认值和自定义验证函数。
声明 props 并进行基础类型校验
在组件选项中使用 props 数组或对象声明接收的 prop。推荐使用对象形式,以便开启类型检查和约束:
-
字符串数组写法:仅声明 prop 名,无校验能力(不推荐用于需要校验的场景)
props: ['title', 'count'] -
对象写法:每个 prop 可配置
type、required、default、validator等选项props: { title: { type: String, required: true }, count: { type: Number, default: 0 } }
支持的 type 类型及注意事项
type 支持原生构造函数(如 String、Number、Boolean、Array、Object、Date、Function、Promise),也支持自定义类(需确保运行时存在):
- 多个类型用数组表示:
type: [String, Number] - 若传入值类型不符,Vue 2 会在开发环境发出警告(生产环境静默)
-
type: Object或Array时,default必须是函数返回值,避免引用共享:default: () => ({ name: '' })或default: () => []
设置必填、默认值与自定义校验
通过组合配置增强健壮性:
-
required: true表示该 prop 必须由父组件传入,否则警告 -
default提供回退值(仅当 prop 未传或为undefined时生效) -
validator接收 prop 值作为参数,返回布尔值;可用于业务逻辑校验,例如:status: { type: String, validator: value => ['active', 'inactive', 'pending'].includes(value) }
在模板和 JS 中访问 props 数据
声明后的 props 会自动挂载到组件实例上,可直接在 template 中插值,或在 data、methods、computed 中通过 this.xxx 访问:
- 模板中:
<h1>{{ title }}</h1> - JS 中:
console.log(this.count) - 注意:props 是单向下行绑定,子组件不应直接修改 props(否则 Vue 2 会警告);如需修改,请基于 prop 创建本地 data 或 computed 属性


















