defineAsyncComponent 函数:异步引入组件。
Suspense 标签:异步引入组件时,显示默认的内容。
异步引入组件:
- import { defineAsyncComponent } from 'vue';
- const Child = defineAsyncComponent(() => {
- return import('../components/Child.vue');
- });
设置组件默认显示的内容:
- <Suspense>
-
- <template v-slot:default>
- <Child>Child>
- template>
-
- <template v-slot:fallback>
- <h3>加载中,请稍等...h3>
- template>
- Suspense>
注:Suspense 标签中有两个插槽 default 和 fallback,插槽名是固定的,不能随意更改。
创建 Child 子组件:
- <div class="child">
- <h3>我是Child组件(子组件)h3>
- div>
-
- <script>
- export default {
- name: "Child"
- }
- script>
- <style scoped>
- .child {
- background-color: red;
- padding: 10px;
- }
- style>
创建 Parent 父组件:通过静态引入的方式使用 Child 组件。
- <template>
- <div class="parent">
- <h3>我是Parent组件(父组件)h3>
- <Child>Child>
- div>
- template>
-
- <script>
- // 静态引入【同步引入】
- import Child from '../components/Child';
- export default {
- name: "Parent",
- components: { Child }
- }
- script>
-
- <style scoped>
- .parent {
- background-color: aqua;
- padding: 10px;
- }
- style>
注:在控制台的 Network 中,将网络调成 Slow 3G(慢的 3G 网络)。刷新页面后,我们会发现父组件和子组件是一起显示的。
注:假如子组件中的数据量特别大,那么静态引入时,也会导致父组件延迟显示。
修改 Parent 父组件:通过异步引入的方式使用 Child 组件。
- <template>
- <div class="parent">
- <h3>我是Parent组件(父组件)h3>
- <Child>Child>
- div>
- template>
-
- <script>
- // 引入 defineAsyncComponent 函数
- import { defineAsyncComponent } from 'vue';
- // 动态引入【异步引入】
- const Child = defineAsyncComponent(() => {
- return import('../components/Child.vue');
- });
- export default {
- name: "Parent",
- components: { Child }
- }
- script>
-
- <style scoped>
- .parent {
- background-color: aqua;
- padding: 10px;
- }
- style>
注:同样调成 Slow 3G 网络,我们会发现父组件显示出来之后,子组件才显示。
原创作者:吴小糖
创作时间:2023.10.27