首页IT科技tsvul(vue3+ts深入组件(一)Props)

tsvul(vue3+ts深入组件(一)Props)

时间2025-08-03 06:46:17分类IT科技浏览4570
导读:一、Props 声明 一个组件需要显式声明它所接受的 props,这样 Vue 才能知道外部传入的哪些是 props,哪些是透传 attribute...

一               、Props 声明

一个组件需要显式声明它所接受的 props               ,这样 Vue 才能知道外部传入的哪些是 props                      ,哪些是透传 attribute

在使用SFC时       ,props 可以使用 defineProps() 宏来声明:

如子组件中 (1) const props = defineProps([foo]) (2) const props = defineProps({ title:String, age:Number }) (3)搭配ts 可使用类型标注 const props = defineProps<{ title:String, age?:Number }>()

二                      、传递静态prop(只能是字符串)

父组件 <Cpn say-hello="Hello" /> 子组件中 const props = defineProps<{ sayHello:String }>

注意:vue3官方文档中介绍        ,prop 与事件的名字也提供了自动的格式转换               。

子组件中用camelCase 形式命名

但在父组件中可以使用 kebab-case 形式来监听                      。

与 prop 大小写格式一样                      ,在模板中我们也推荐使用 kebab-case 形式来编写监听器       。

即 addEvent 会自动解析为add-event 并且由于代码位置及风格匹配              ,提高了模板的可读性

官方推荐利用这种代码特性 来书写 prop 及事件

本文中即为:(sayHello 与say-hello)

三       、传递非字符串类型        ,使用v-bind

如传递数组 <Cpn :names=[A,B,C]> 传递数字 <Cpn :num="24"> 传递对象 <Cpn :author="{ name:Asen, age:20 }">

你可以使用一个对象绑定多个prop并传递参数

const prop = { name:Asen, age:20 } 模板中 <Cpn v-bind="prop">

四               、prop校验

在子组件中可以进行校验

const props = defineProps({ // 基础类型检查 // (给出 `null` 和 `undefined` 值则会跳过任何类型检查) propA: Number, // 多种可能的类型 propB: [String, Number], // 必传                       ,且为 String 类型 propC: { type: String, required: true }, // Number 类型的默认值 propD: { type: Number, default: 100 }, // 对象类型的默认值 propE: { type: Object, // 对象或数组的默认值 // 必须从一个工厂函数返回        。 // 该函数接收组件所接收到的原始 prop 作为参数                      。 default(rawProps) { return { message: hello } } }, // 自定义类型校验函数 propF: { validator(value) { // The value must match one of these strings return [success, warning, danger].includes(value) } }, // 函数类型的默认值 propG: { type: Function, // 不像对象或数组的默认              ,这不是一个工厂函数              。这会是一个用来作为默认值的函数 default() { return Default function } } })

五                      、单向数据流

子组件中不允许直接修改父组件传递过来的参数(会抛出错误)

如需修改,可以在子组件中先获取到传递过来的值以后再次进行修改 const props = defineProps({ name:"Asen" }) const myname = ref(props.name) 此时再次修改myname 即可

文末

新人创作                       ,还望支持!欢迎学习交流                      ,如有错误,还请指正!

已更新于2022/11/22

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
百度新站收录需要多久(百度新站收录考察期) 章丘在线 章丘人自己的家园(章丘在线章丘人论坛)