Skip to content

内置组件

Vue 提供了一些内置组件,这些组件可以直接在模板中使用,无需导入。

Transition

<Transition> 组件为单个元素或组件提供动画过渡效果。

template
<Transition name="fade">
  <p v-if="show">Hello</p>
</Transition>

TransitionGroup

<TransitionGroup> 组件为列表中的多个元素或组件提供过渡效果。

template
<TransitionGroup name="list" tag="ul">
  <li v-for="item in items" :key="item.id">
    {{ item.text }}
  </li>
</TransitionGroup>

KeepAlive

<KeepAlive> 组件可以缓存包裹的组件实例,避免重复创建和销毁。

template
<KeepAlive>
  <component :is="currentComponent" />
</KeepAlive>

包含/排除

template
<!-- 逗号分隔字符串 -->
<KeepAlive include="a,b">
  <component :is="view" />
</KeepAlive>

<!-- 正则表达式 (使用 `v-bind`) -->
<KeepAlive :include="/a|b/">
  <component :is="view" />
</KeepAlive>

<!-- 数组 (使用 `v-bind`) -->
<KeepAlive :include="['a', 'b']">
  <component :is="view" />
</KeepAlive>

最大缓存实例数

template
<KeepAlive :max="10">
  <component :is="activeComponent" />
</KeepAlive>

Teleport

<Teleport> 组件可以将其插槽内容渲染到 DOM 中的其他位置。

template
<Teleport to="body">
  <div class="modal">
    <p>A modal</p>
  </div>
</Teleport>

禁用 Teleport

template
<Teleport :disabled="isMobile">
  <div class="modal">
    <p>A modal</p>
  </div>
</Teleport>

Suspense

<Suspense> 组件用于协调对组件树中嵌套的异步依赖的处理。

template
<Suspense>
  <!-- 具有深层异步依赖的组件 -->
  <Dashboard />

  <!-- 在 #fallback 插槽中显示 "正在加载中" -->
  <template #fallback>
    Loading...
  </template>
</Suspense>

异步依赖

异步依赖可以是:

  1. 带有异步 setup() 钩子的组件
  2. 异步组件
vue
<script setup>
// 异步 setup()
const res = await fetch(...)
const posts = await res.json()
</script>

<template>
  <div>{{ posts }}</div>
</template>

错误处理

template
<Suspense>
  <Dashboard />
  <template #fallback>
    Loading...
  </template>
</Suspense>

可以通过 onErrorCaptured 钩子来处理错误:

vue
<script setup>
import { onErrorCaptured } from 'vue'

onErrorCaptured((err) => {
  console.log(err)
  return true // 阻止错误继续冒泡
})
</script>

基于 Vue.js 官方文档构建的学习宝典