defineAsyncComponent 函数:异步引入组件。
Suspense 标签:异步引入组件时,显示默认的内容。
异步引入组件的基本使用:
异步引入组件:
import { defineAsyncComponent } from 'vue';
const Child = defineAsyncComponent(() => {return import('../components/Child.vue');
});
设置组件默认显示的内容:
<Suspense><!-- 如果组件加载成功,就显示 default 中的内容 --><template v-slot:default><Child></Child></template><!-- 如果组件正在加载中,就显示 fallback 中的内容 --><template v-slot:fallback><h3>加载中,请稍等...</h3></template>
</Suspense>
注:Suspense 标签中有两个插槽 default 和 fallback,插槽名是固定的,不能随意更改。
异步引入组件的作用:
创建 Child 子组件:
<template><div class="child"><h3>我是Child组件(子组件)</h3></div>
</template><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