1. 首页
  2. Vue

Vue3快速上手之props

// 定义一个接口,限制每个Person对象的格式
export interface PersonInter {
  id:string,
  name:string,
  age:number
}

// 定义一个自定义类型Persons
export type Persons = Array<PersonInter>

App.vue 中代码:

<template>
    <Person :list="persons"/>
</template>

<script lang="ts" setup name="App">
  import Person from './components/Person.vue'
  import {reactive} from 'vue'
  import {type Persons} from './types'

  let persons = reactive<Persons>([
    {id:'e98219e12',name:'张三',age:18},
    {id:'e98219e13',name:'李四',age:19},
    {id:'e98219e14',name:'王五',age:20}
   ])
</script>

Person.vue 中代码:

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

<script lang="ts" setup name="Person">
import {defineProps} from 'vue'
import {type PersonInter} from '@/types'

// 第一种写法:仅接收
// const props = defineProps(['list'])

// 第二种写法:接收+限制类型
// defineProps<{list:Persons}>()

// 第三种写法:在 3.5 及以上版本中,当使用响应式 Props 解构时,可以自然地声明默认值
const { list = {id:'asdasg01',name:'小猪佩奇',age:18} } = defineProps<Props>()

// 第四种写法:在 3.4 及以下版本中,默认情况下并未启用响应式 Props 解构。为了用基于类型声明的方式声明 props 的默认值,需要使用 withDefaults 编译器宏
// 接收+限制类型+指定默认值+限制必要性,注意这里是 3.4 及以下版本的写法
let props = withDefaults(defineProps<{list?:Persons}>(),{
   list:()=>[{id:'asdasg01',name:'小猪佩奇',age:18}]
})
console.log(props)
</script>


TOP