异步组件&代码分包&suspense
setup语法糖中可以使用顶层
await
,结果代打会被编译成async setup()
异步组件
在大型应用中,我们可能需要将应用分割成小一些的代码块 并且减少主包的体积 -> 这时候就可以使用异步组件
父组件引用子组件 通过defineAsyncComponent
加载异步配合import 函数模式
便可以分包
1 | <script setup lang="ts"> |
Suspense
<suspense>
组件有两个插槽。它们都只接收一个直接子节点。default 插槽里的节点会尽可能展示出来。如果不能,则展示 fallback 插槽里的节点
1 | <Suspense> |
Teleport传送组件
Teleport是一种能够将我们的模板渲染值指定DOM节点,不受父级style、v-show等属性影响,但data、props数据依旧能够共用的技术;类似于React的Portal;
主要解决的问题,因为Teleport节点挂载在其他指定的DOM节点下,完全不受父级style样式影响
使用方法
通过to属性 插入指定元素位置
to="body"
便可以将Teleport内容传送至指定位置
1 | <Teleport to="body"> |
也可以自定义传送位置 支持 class id等 选择器
也可以使用多个
1 | <Teleport to=".modal1"> |
keep-alive缓存组件
内置组件keep-alive
有时候我们不希望组件被重新渲染影响使用体验;或者处于性能考虑,避免多次重复渲染降低性能。而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive
组件。
开启keep-alive生命周期的变化
- 初次进入时:onMounted > onActivated
- 退出后触发:deactivated
- 再次进入:只会触发onActivated
- 事件挂载的方法等,只执行一次的放置onMounted中;组件每次进去执行的方法放在onActivated中
1 | <!-- 基本 --> |
include和exclude
1 | <keep-alive :include="" :exclude="" :max=""></keep-alive> |
include
和 exclude prop
允许组件有条件地缓存。二者都可以用逗号分隔字符串、正则表达式或一个数组来表示。
max
1 | <keep-alive :max="10"> |