๐ย Reference
๐ย Chapter
Front-end ์ฑ๋ฅ ์ต์ ํ
Vue.js - ์ฑ๋ฅ ์ต์ ํ
โฃ
Async Component
- Async Component
- defineAsyncComponent
- ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ฑ์ ๋ ์์ ์ฒญํฌ๋ก ๋๋๊ณ ํ์ํ ๋๋ง ์๋ฒ์์ ๊ตฌ์ฑ ์์๋ฅผ ๋ก๋ํด์ผ ํ ์๋ ์๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด Vue์๋ defineAsyncComponent ํจ์๊ฐ ์๋ค.
import { defineAsyncComponent } from 'vue'
const AsyncComp = defineAsyncComponent(() => {
return new Promise((resolve, reject) => {
// ...load component from server
resolve(/* loaded component */)
})
})
// ... use `AsyncComp` like a normal component
- ๋ณด์๋ค์ํผ defineAsyncComponent๋ Promise๋ฅผ ๋ฐํํ๋ ๋ก๋ ํจ์๋ฅผ ํ์ฉํ๋ค.
- ์๋ฒ์์ ๊ตฌ์ฑ ์์ ์ ์๋ฅผ ๊ฒ์ํ๋ฉด Promise์ resolve ์ฝ๋ฐฑ์ ํธ์ถํด์ผ ํ๋ค.
- ๋ํ reject(reason)์ ํธ์ถํ์ฌ ๋ก๋๊ฐ ์คํจํ์์ ๋ํ๋ผ ์ ์๋ค.
- ES module dynamic import๋ Promise๋ฅผ ๋ฐํํ๋ฏ๋ก ๋๋ถ๋ถ defineAsyncComponent์ ํจ๊ป ์ฌ์ฉํ๋ค.
- Vite ๋ฐ webpack๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ ๊ตฌ๋ฌธ์ ์ง์ํ๋ฏ๋ก(๋ฒ๋ค ๋ถํ ์ง์ ์ผ๋ก ์ฌ์ฉํจ) Vue SFC๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
import { defineAsyncComponent } from 'vue'
const AsyncComp = defineAsyncComponent(() =>
import('./components/MyComponent.vue')
)
- ๊ฒฐ๊ณผ AsyncComp๋ ์ค์ ๋ก ํ์ด์ง์ ๋ ๋๋ง๋ ๋๋ง ๋ก๋ ํจ์๋ฅผ ํธ์ถํ๋ ๋ํผ ๊ตฌ์ฑ ์์์ด๋ค.
- ๋ํ ๋ชจ๋ props์ ์ฌ๋กฏ์ ๋ด๋ถ ๊ตฌ์ฑ ์์์ ์ ๋ฌํ๋ฏ๋ก ๋น๋๊ธฐ ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ฐ ๋ก๋ฉ์ ๋ฌ์ฑํ๋ ๋์์ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ํํ๊ฒ ๋์ฒดํ ์ ์๋ค.
- ์ผ๋ฐ ๊ตฌ์ฑ ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋๊ธฐ ๊ตฌ์ฑ ์์๋ app.component()๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ญ์ ์ผ๋ก ๋ฑ๋กํ ์ ์๋ค.
app.component('MyComponent', defineAsyncComponent(() =>
import('./components/MyComponent.vue')
))
- ๋ถ๋ชจ ๊ตฌ์ฑ ์์ ๋ด๋ถ์์ ์ง์ ์ ์ํ ์๋ ์๋ค.