vue3笔记七(异步组件、suspense组件、teleport组件)

1、异步组件

何为异步组件?

vue3在调用这个组件时,它并不立即渲染,而是等到一些业务逻辑完成后,才会执行组件内的逻辑和渲染到页面上。

2、suspense 组件

suspense 组件有两个插槽。它们都只接收一个直接子节点。
default 插槽里的节点展示异步请求完成后,显示的模板内容;
fallback 插槽里的节点则展示异步请求加载中,显示的内容

3、异步组件 + suspense 组件

// 父组件
<template>
  <div>
    <Suspense>
      <template #default>
        <async-comp/>
      </template>
      <template #fallback>
        loading...
      </template>
    </Suspense>
  </div>
</template>

<script setup lang="ts">
  import { defineAsyncComponent } from 'vue'
  // 直接引入,npm run build 不分包
  // import AsyncComp from './AsyncComp.vue'
  
  // 通过defineAsyncComponent加载异步配合import 函数模式便可以分包
  const AsyncComp = defineAsyncComponent(() => import('./AsyncComp.vue'))
</script>

// 子组件
<template>
  <div>
    异步组件
  </div>
  <div v-for="item in list" :key="item.name">
    {{ item.name }} --- {{ item.age }}
  </div>
</template>

<script setup lang="ts">
  type List = {
    name: string,
    age: number
  }

  const getList = ():Promise<List[]> => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        let res:List[] = [{name: '张三', age: 11}, {name: '李四', age: 22}]
        resolve(res)
      }, 3000)
    })
  }
  // <script setup> 中可以直接使用 await, 但函数声明仍需async await搭配使用
  let list:List[] = await getList()
</script>

4、teleport瞬移组件

Teleport 是一种能够将我们的模板渲染至指定DOM节点,不受父级style、v-show等属性影响,但受父级v-if的影响且data、prop数据依旧能够共用

<teleport to="body">
  <div>瞬移到body中</div>
</teleport>

原文链接:
https://xiaoman.blog.csdn.net/article/details/122909360
https://xiaoman.blog.csdn.net/article/details/122916261

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值