vue在解析我们的组件时, 是通过打包成一个 js 文件,当我们的一个组件 引入过多子组件是,页面的首屏加载时间 由最后一个组件决定 优化的一种方式就是采用异步组件 ,先给慢的组件一个提示语或者 骨架屏 ,内容回来在显示内容

结合elementui 使用

代码  

<template><div class="layout"><h1>suspense</h1><Suspense><template #default><sus></sus></template><template #fallback><copyVue/></template></Suspense></div>
</template>
<script lang="ts" setup>
import { defineAsyncComponent } from "vue";
import copyVue from "./sus/copy.vue";
let sus = defineAsyncComponent(() => import("./sus/index.vue"));
</script>
<style scoped lang="scss">$bg:#ccc;.layout{width: 800px;height: 400px;background-color: $bg;margin: auto;}
</style>

引入  defineAsyncComponent   定义异步组件 ,这个api 接收 一个 一个函数 ,函数返回值 为 需要 后来显示的组件  , copyVue 为预先显示的组件 或者自定义内容

 <Suspense><template #default><sus></sus></template><template #fallback><copyVue/></template></Suspense>

使用 suspense  内置组件 在该组件内 使用 命名插槽 官方 定义的

#default  放后来显示的组件

#fallback  放置 预先显示的内容

要想组件变成异步 组件 可以使用 顶层 await 技术  即 不用再 async 函数内使用 那个该组件就变成 异步组件

代码

<template><div class="sus"><img class="img" :src="res.url" alt=""><h1 class="posi">{{res.name }}</h1><h1 class="posi">{{ res.des }}</h1></div>
</template>
<script lang="ts" setup>
import axios from 'axios'
import './com.scss'
let fn = ()=>{return new Promise(  (resolve,reject)=>{setTimeout(async() => {resolve(axios.get('/data.json'))}, 2000);})}let {data:{data:res}}:any =  await   fn()console.log(res);
</script>
<style scoped lang='scss'>.sus{width: 100%;height: 200px;background-color: #999;
}</style>

copyvue

<template><div  v-loading="loading" element-loading-text="加载中..." element-loading-background="rgba(122, 122, 122, 0.8)" class="sus"></div>
</template>
<script lang="ts" setup>
import axios from 'axios'
import { ref } from 'vue'
const loading = ref(true)
</script>
<style scoped lang='scss'>
.sus{width: 100%;height: 200px;
}</style>

scss

.posi{height: 50px;background-color: rgb(209, 136, 136);margin-top: 20px;}.img{width: 30px;height: 30px;background-color: rgb(113, 52, 52);}

public 下的 data.json

{"data":{"name":"你好世界","url":"./favicon.ico","des":"世界是个荒原"}
}

public 下的  内容 回当成 服务的  '/xxx' 请求路径  get可以请求 到文件内容

http://localhost:5173/data.json

Vue3 异步组件 suspense相关推荐

  1. 异步组件Suspense

    异步组件 由于vue是单页面应用,但很多时候加载大量的代码会因为请求还没有完成导致页面出现空白的情况,这时候我们想在数据请求加载之前显示一些其他提示内容而不是空白.等页面加载完成之后在渲染数据. 此时 ...

  2. vue3异步组件怎么获取ref,获取组件实例?曲线救国的方式。

    翻看文档实在没找到异步组件加载成功后的回调,获取ref写个setTimeout延迟个一两秒可以,万一网速慢就GG,所以还是得明确的知道这个组件什么时候下载引入成功的. 目前的思路是把defineAsy ...

  3. vue3 + vite + ts + setup , 第四练 异步组件的使用,defineAsyncComponent和Suspense的使用

    在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件.这样做的目的可以提高页面加载速度,优化用户体验,减少首屏白屏时间 defineAsyncComponent 方法接收一 ...

  4. Webpack的代码分包Vue3中定义异步组件分包refs的使用

    一.默认的打包过程: 默认情况下,在构建整个组件树的过程中,因为组件和组件之间是通过模块化直接依赖的,那么webpack在打包时就会将组件模块打包到一起(比如一个app.js文件中): 这个时候随着项 ...

  5. suspense组件和异步组件

    等待异步组件时渲染一些额外内容,让应用有更好的用户体验 使用步骤: 异步引入组件,使用defineAsyncComponent定义异步组件 import {defineAsyncComponent} ...

  6. Vue3动态组件/异步组件

    文章目录 一.动态组件 1.markRaw 2.keep-alive 二.异步组件 1.使用官方提供的defineAsyncComponent()函数 2.使用插件vueuse 一.动态组件 动态切换 ...

  7. vue前端路由和异步组件

    路由 前端路由的目的: 在不用请求后端的情况下跳转页面 hash路由 1.通过改变hash值去改变路由 2.通过loacation.hash得到hash值 '#/curriculum' 3.监听事件: ...

  8. react-activation缓存React.lazy异步组件问题记录

    1.背景 当前框架使用的路由规则是使用React.lazy动态绘制的,使用KeepAlive组件缓存时一直不能缓存 export const RouteWithChildrenSubRoutes = ...

  9. Vue异步组件Demo

    Vue异步组件Demo 在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载.为了进一步简化,Vue.js 允许将组件定义为一个工厂函数,异步地解析组件的定义.Vue.js 只在组件需要 ...

  10. vue 如何处理两个组件异步问题_Vue动态异步组件实现思路及其问题

    前言:在vue 官方资料中,我们可以可以很学会如何通过vue构建"动态组件"以及"异步组件",然而,在官方资料中,并没有涉及到真正的"动态异步&quo ...

最新文章

  1. Science:充满铵盐的环境依然发生固氮
  2. MySQL的字符编码体系(一)——数据存储编码
  3. Py之gensim:gensim的简介、安装、使用方法之详细攻略
  4. 【转摘】如何得心应手的玩转Excel
  5. 我用 PyTorch 复现了 LeNet-5 神经网络(CIFAR10 数据集篇)!
  6. mykernel编译过程中问题解决
  7. 创建字符串枚举的最好方法
  8. LeetCode 1726. 同积元组(排列组合)
  9. python中各种@property、@xxx.setter、@classmethod、@staticmethod 都是些啥啊?
  10. 固定再计算机主机箱,一种计算机主机放置箱架的制作方法
  11. 让无数人头疼的网络攻击到底是什么?究竟隐藏了哪些不为人知的秘密?
  12. 数据库入口和密码:维普、万方和cnki(转)
  13. 通过集成第三方IM实现聊天应用
  14. python_dict_好玩游戏的物品清单
  15. PB中的timer事件
  16. 托福百日冲刺(五一记忆)(1)
  17. 私有文件服务器系统,GitHub - xty438307820/NetDisk-Private: 基于Linux的私有文件服务器(网盘)...
  18. 运算符、||运算符、?.可选链运算符、? ?空位合并运算符
  19. FPGA 双按键控制LED呼吸灯实现
  20. 基于51单片机的电压采集(ADC0809)

热门文章

  1. html页面如何嵌入cms,制作好的网页模板如何放入网站CMS中?
  2. 大数据分析图形绘制如何进行?
  3. html标签属性大全(囊括CSS、CSS3、H5、XML等)
  4. 360浏览器登录新浪微博图标显示为字母及占用CPU过高问题的解决
  5. 2021年焊工(初级)考试题及焊工(初级)考试报名
  6. 网络编程(6)--------javaweb(TCP协议)
  7. 格律诗的基本知识【一小时学会写格律诗】
  8. Frontend Framework
  9. java和python哪个运行速度快_python和java学哪个比较简单点
  10. Mac OS X: XAMP在Mac上的实现