Vue 3 基础笔记 8 | 青训营笔记

77 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 18 天,今天在开发青训营大项目的过程中,继续学习了如何从头开发一个 Vue 3 的项目,包括 Vue 3 的基础语法等。

缓存组件

基本使用

默认情况下,一个组件实例在被替换掉后(例如通过 v-if 或者 is 属性)会被销毁。

通过 Vue 的内置组件 <KeepAlive>,可以将 <KeepAlive> 内部被销毁的组件缓存起来。当再次显示被销毁的组件时会渲染缓存的组件,而不是重新渲染一个组件。

使用缓存可以保持组件的状态。

包含或者排除组件

<KeepAlive>includeexclude 属性可以包含或者排除使用缓存的组件。

includeexclude 属性中传入组件名字符串即可包含或者排除使用缓存的组件,多个组件名用 , 分割开。

最大缓存实例数

<KeepAlive>max 属性可以指定最大缓存实例数。

max 属性中传入一个整数即可。

传送组件

使用 <Teleport> 内置组件可以将 <Teleport> 内的元素渲染到页面的其他地方,而不破坏组件之间的逻辑关系。

to 属性

<Teleport> 上指定 to 属性即可指定内部元素渲染的位置。

to 属性接收一个字符串,字符串为 CSS 选择器。

disabled 属性

<Teleport> 上指定 disabled 属性为 true 即可禁用传送。

组件插槽

基本使用

使用 <slot> 在子组件中定义插槽:

<button class="fancy-btn">
  <slot></slot> <!-- 插槽出口 -->
</button>

在父组件中使用子组件,并在插槽中放入内容:

<FancyButton>
  Click me! <!-- 插槽内容 -->
</FancyButton>

这样父组件中的插槽内容会渲染在子组件之中。

渲染作用域

插槽内容是属于父组件的,所以无法访问子组件的数据等。

默认内容

在子组件中定义插槽时,在 <slot> 标签内部放入元素,作为默认内容。当父组件没有传入插槽内容时,会渲染 <slot> 标签内的内容;否则,<slot> 标签内的内容会被父组件的插槽内容替代。

<button type="submit">
  <slot>
    Submit <!-- 默认内容 -->
  </slot>
</button>

具名插槽

子组件中,在 <slot> 标签上定义属性 name 为插槽定义唯一名称。

父组件中,使用 <template #xxxxxx> 定义插槽内容,可以将内容放入指定名称的插槽中。

<BaseLayout>
  <template #header>
    <!-- header 插槽的内容放这里 -->
  </template>
</BaseLayout>

父组件中,所有不在 <template #xxxxxx> 中的内容会被放入子组件的没有名称的 <slot> 标签内。

父组件中,使用 #[dynamicSlotName] 可以动态指定插槽名。