Vue.js 的异步组件是指在渲染组件时,异步获取组件的定义。这可以用于缩减打包文件大小,以及在用户访问路由时加载组件。
使用异步组件的三种方式:
- 工厂函数:
js
Vue.component('async-example', () => {
// 该函数会接收一个 resolve callback
// 在组件定义好之后,利用 resolve 执行回调
setTimeout(() => {
resolve({
template: '<div>I am async!</div>'
})
}, 1000)
})
- Promise:
js
Vue.component(
'async-example',
() => new Promise(resolve => {
setTimeout(() => {
resolve({
template: '<div>I am async!</div>'
})
}, 1000)
})
)
- 异步导入:
js
Vue.component(
'async-example',
() => import('./components/async-example')
)
无论采取何种方式,组件的实例都会被创建为一个普通组件,用户看不出任何差异。
使用异步组件的好处:
- 按需加载:只有在需要渲染异步组件时才会加在其依赖,可以显著加快应用的初始渲染速度。
- 解耦部署与构建:异步组件不会打包进最终的捆绑文件中,而是作为单独的 JavaScript 文件进行加载。这允许我们在构建之后动态加载新的组件。
使用注意点:
- 异步组件确保在组件成功解析前调用 Vue.component() 注册该组件。
- 异步组件工厂函数应该返回 Promise 对象或一个回调接收 resolve 作为参数。
- 异步组件也可以使用在路由配置中,处理按需加载的路由组件。