[Vue3] - defineProps 接收从App.vue传来的东西

在Person.vue中用defineProps接收从App.vue传来的东西

基本类型

App.vue

<template>
  <Person a="Hi" b="H"/>
</template>
  
<script lang="ts" setup name="App">
  import Person from './components/Person.vue'
</script>

Person.vue

<template>
    <div class="person">
      <!-- 可以直接打印接收到的a -->
      {{ a }} 
    </div>
</template>


<script lang="ts" setup name = "Person">
  import {defineProps} from 'vue'

  // 接收a
  let x = defineProps(['a', 'b']) // 必须以数组形式接收,不管传入的是1个还是多个
  console.log(x)
</script>


<style scoped>
  /* 可以添加样式 */
</style>

对象类型

App.vue

<template>
  <!-- 加‘:’了就是表达式,是表达式就会执行,这里会读取personList -->
  <Person :list="personList"/> 
  <!-- 但是ref不用加冒号,是特例 -->
</template>
  
<script lang="ts" setup name="App">
  import Person from './components/Person.vue'
  import {reactive} from 'vue'
  import {type Persons} from '@/types'

  let personList = reactive<Persons>([
    {id:'No1', name:'Jack', age:11},
    {id:'No2', name:'Rose', age:12, x:'xx'}, // 如果希望x部分对象有,部分没有,需要在接口增加一个‘?’
    {id:'No3', name:'Pete', age:13}
  ])

  console.log(personList)

</script>

<style scoped>
/* 可以添加一些样式 */
</style>

Person.vue

<template>
    <div class="person">
      <ul>
        <li v-for="p in list" :key="p.id"> {{ p.name }} {{ p.age }}</li>
      </ul>
    </div>
</template>

<script lang="ts" setup name = "Person">
  // import {defineProps} from 'vue' //defineXXX 可以不用引入,因为是宏函数
  import { type Persons } from '@/types';

  // 接收list
  
  
  withDefaults( // withDefaults()指定默认值 
    defineProps<{list?:Persons}>(), // 限制person对象的具体属性 问号使得App.vue传不传list过来都不报错
    {list:()=>[{id:'1', name:'Logan', age: 299}]} 
  )

</script>


<style scoped>
  /* 可以添加样式 */
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值