728x90
반응형
필요할 때만 서버에서 컴포넌트를 로드해야 할 수 있다. 이를 구현하기 위해 defuneAsyncComponent 함수를 제공한다.
import { defineAsyncComponent } from 'vue'
const AsyncComp = defineAsyncComponent(() => {
return new Promise((resolve, reject) => {
// ...서버에서 컴포넌트를 로드하는 로직
resolve(/* 로드 된 컴포넌트 */)
})
})
// ... 일반 컴포넌트처럼 `AsyncComp`를 사용
rosolve 콜백을 호출해 서버에서 가져온 정의되어 있는 컴포넌트를 반환한다. 로드가 실패했음을 나타내기 위해 reject(reason)을 호출할 수도 있다.
import { defineAsyncComponent } from 'vue'
const AsyncComp = defineAsyncComponent(() =>
import('./components/MyComponent.vue')
)
일반 컴포넌트처럼, 비동기 컴포넌트도 전역/로컬 등록이 가능하다.
app.component('MyComponent', defineAsyncComponent(() =>
import('./components/MyComponent.vue')
))
<script>
import { defineAsyncComponent } from 'vue'
export default {
components: {
AdminPage: defineAsyncComponent(() =>
import('./components/AdminPageComponent.vue')
)
}
}
</script>
<template>
<AdminPage />
</template>
로딩 및 에러 상태
비동기 작업에는 필연적으로 로드 및 에러 상태가 포함된다.
const AsyncComp = defineAsyncComponent({
// 로더 함수
loader: () => import('./Foo.vue'),
// 비동기 컴포넌트가 로드되는 동안 사용할 로딩 컴포넌트입니다.
loadingComponent: LoadingComponent,
// 로딩 컴포넌트를 표시하기 전에 지연할 시간. 기본값: 200ms
delay: 200,
// 로드 실패 시 사용할 에러 컴포넌트
errorComponent: ErrorComponent,
// 시간 초과 시, 에러 컴포넌트가 표시됩니다. 기본값: 무한대
timeout: 3000
})
로딩 컴포넌트가 제공되면 내부 컴포넌트가 로딩되는 동안 먼저 표시됩니다. 로딩 컴포넌트가 표시되기 전에 기본 200ms 지연시간이 있습니다. 이는 빠른 네트워크에서 인스턴트 로딩 상태가 너무 빨리 교체되어 깜박임처럼 보일 수 있기 때문입니다.
에러 컴포넌트가 제공되면 로더 함수의 Promise가 reject로 반환될 때 표시됩니다. 요청이 너무 오래 걸릴 때 에러 컴포넌트를 표시하도록 시간 초과를 지정할 수도 있습니다.
728x90
반응형
'Vue.js' 카테고리의 다른 글
Vue.js] 19. Single-File Components (0) | 2025.01.03 |
---|---|
Vue.js] 18. Built-in Components > Transition, KeepAlive (0) | 2025.01.03 |
Vue.js] 16. Component > Provide / Inject (0) | 2024.12.31 |
Vue.js] 15. Component > Slots (1) | 2024.12.31 |
Vue.js] 14. Component > v-model, Fallthrough 속성 (0) | 2024.12.31 |
댓글