提交学习笔记专用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.2 KiB

  1. App.vue
  2. <template>
  3. <Person :list="persons"/>
  4. </template>
  5. <script lang="ts" setup name="App">
  6. import Person from './components/Person2.vue'
  7. import {reactive} from 'vue'
  8. import {type Persons} from '@/types'
  9. let persons = reactive<Persons>([
  10. {id:'e98219e12',name:'张三',age:18},
  11. {id:'e98219e13',name:'李四',age:19},
  12. {id:'e98219e14',name:'王五',age:20}
  13. ])
  14. </script>
  15. <style>
  16. </style>
  17. Perspon.vue
  18. <template>
  19. <div class="person">
  20. <ul>
  21. <li v-for="item in list" :key="item.id">
  22. {{item.name}}--{{item.age}}
  23. </li>
  24. </ul>
  25. </div>
  26. </template>
  27. <script lang="ts" setup name="Person">
  28. import {defineProps,withDefaults} from 'vue'
  29. import {type PersonInter} from '@/types'
  30. // 第一种写法:仅接收
  31. // const props = defineProps(['list'])
  32. // 第二种写法:接收+限制类型
  33. // defineProps<{list:Persons}>()
  34. // 第三种写法:接收+限制类型+指定默认值+限制必要性
  35. let props = withDefaults(defineProps<{list?:PersonInter[]}>(),{
  36. list:()=>[{id:'asdasg01',name:'小猪佩奇',age:18}]
  37. })
  38. //接收list,同时将props保存起来
  39. // let x = defineProps<{list:Persons}>()
  40. console.log(props)
  41. </script>
  42. <style scoped>
  43. .person{
  44. width: 200px;
  45. height: 200px;
  46. background-color: red;
  47. }
  48. </style>