一、defineProps属性:
javascript
type: 定义数据的类型
reqiured: 是否必须
default: 默认值
validator: 自定义验证
二、基本使用
父组件
javascript
//父组件
<template>
<div class="box">
<h1>父组件</h1>
<hr />
<Child info="子组件" :age="age" name="name"></Child>
</div>
</template>
<script setup lang="ts">
//props:父子组件通信 props是只读的
import Child from "./Child.vue";
import { ref } from "vue";
let age = ref(18);
let name= ref('yyy');
</script>
<style scoped>
.wrap{
width: 100vw;
height:100;
}
</style>
子组件 js中 接收props
javascript
<template>
<div class="box">
<h1>子组件</h1>
<h3>姓名:{{name}}</h3>
<h3>姓名:{{age}}</h3>
</div>
</template>
<script setup lang="ts">
import { ref, defineProps } from 'vue'
//const props = defineProps(['name','age']); //方法一 通过数据方法接收
const props = defineProps({ //放法二 通过对象接收
name: String,
age: {
type: Number,
default: 18,
reqiured: true,
validator: (val) => val > 18
},
})
//props.name ='qqqq'//报错,props只读
</script>
<style scoped>
.wrap{
width: 100vw;
height:100;
}
</style>
子组件 ts中定义接口 接收props
javascript
<template>
<div class="box">
<h1>子组件</h1>
<h3>姓名:{{name}}</h3>
<h3>姓名:{{age}}</h3>
</div>
</template>
<script setup lang="ts">
import { ref, defineProps } from 'vue'
interface PropsType {
name: string
age: number
}
//const props = defineProps<PropsType >()//方式一 没有默认值
//const {name,age}= defineProps();//也可以通过解构的方式获取
const props = withDefaults(defineProps<PropsType >(), {//方式二 使用withDefaults 添加默认值
name: 'yyy',
age: 18
})
</script>
<style scoped>
.wrap{
width: 100vw;
height:100;
}
</style>