Vue.component('async-example', function (resolve, reject) {
setTimeout(function () {
// resolve callback 에 컴포넌트 정의를 넘겨줍니다
resolve({
template: '<div>I am async!</div>'
})
}, 1000)
})
팩토리 함수는 서버로부터 컴포넌트 처리할 때 실행할 resolve
callback을 받는다. 로드를 실패할 경우는 reject
로 처리될 수 있다.
vue3의 함수형 컴포넌트는 순수 함수로 정의되어 있으므로 비동기 컴포넌트 정의는 defineAsyncComponent
함수를 사용한다.
import { defineAsyncComponent } from 'vue'
const asyncModalWithOptions = defineAsyncComponent({
loader: () => import('./Modal.vue'),
delay: 200,
timeout: 3000,
error: ErrorComponent,
loading: LoadingComponent
})
// 2.x 버전
const oldAsyncComponent = (resolve, reject) => {
/* ... */
}
// 3.x 버전
const asyncComponent = defineAsyncComponent(
() =>
new Promise((resolve, reject) => {
/* ... */
})
)
component 옵션명을 loader
로 변경하고 Loader함수는 resolve
및 reject
의 인수를 받지 않고 promise를 반환한다.