# Komponen Asinkron
new
# Gambaran Umum
Berikut merupakan gambaran umum tentang perubahan yang terjadi:
- Fungsi bantuan baru bernama
defineAsyncComponent
yang secara eksplisit menyatakan komponen asinkron - Opsi
component
diubah menjadiloader
- Fungsi pemuat tidak lagi memiliki argumen
resolve
danreject
dan harus mengembalikan sebuahPromise
Lanjutkan membaca untuk penjelasan lebih lanjut
# Perkenalan
Sebelumnya, komponen asinkron dibuat dengan menyatakan sebuah komponen sebagai sebuah fungsi yang mengembalikan sebuah Promise
, seperti:
const halamanAsinkron = () => import('./HalamanSelanjutnya.vue')
Atau, dengan sintaks komponen yang lebih rumit yang memiliki opsi:
const halamanAsinkron = {
component: () => import('./HalamanSelanjutnya.vue'),
delay: 200,
timeout: 3000,
error: ErrorComponent,
loading: LoadingComponent
}
2
3
4
5
6
7
# Sintaks Pada Versi 3.x
Sekarang di Vue versi 3 karena komponen fungsional dinyatakan sebagai fungsi murni, pernyataan komponen asinkron harus dinyatakan secara eksplisit dengan membungkus komponen dengan sebuah fungsi bantuan bernama defineAsyncComponent
:
import { defineAsyncComponent } from 'vue'
import ErrorComponent from './components/ErrorComponent.vue'
import LoadingComponent from './components/LoadingComponent.vue'
// Komponen asinkron tanpa opsi
const halamanAsinkron = defineAsyncComponent(() => import('./HalamanSelanjutnya.vue'))
// Komponen asinkron yang memiliki opsi
const halamanAsinkronDenganOpsi = defineAsyncComponent({
loader: () => import('./HalamanSelanjutnya.vue'),
delay: 200,
timeout: 3000,
errorComponent: ErrorComponent,
loadingComponent: LoadingComponent
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Perubahan lain yang terjadi dari Vue versi 2 adalah opsi component
yang diubah menjadi loader
yang bertujuan untuk menyampaikan bahwa pernyataan komponen tidak dapat disediakan secara langsung.
import { defineAsyncComponent } from 'vue'
const halamanAsinkronDenganOpsi = defineAsyncComponent({
loader: () => import('./HalamanSelanjutnya.vue'),
delay: 200,
timeout: 3000,
errorComponent: ErrorComponent,
loadingComponent: LoadingComponent
})
2
3
4
5
6
7
8
9
Selain itu, tidak sepert pada Vue versi 2, fungsi pemuat tidak lagi memiliki argumen resolve
dan reject
dan harus selalu mengembalikan sebuah Promise
// Pada Vue versi 2.0
const komponenAsinkronLama = (resolve, reject) => {
/* ... */
}
// Pada Vue versi 3.0
const komponenAsinkron = defineAsyncComponent(
() =>
new Promise((resolve, reject) => {
/* ... */
})
)
2
3
4
5
6
7
8
9
10
11
12
Anda dapat mempelajari lebih lanjut tentang penggunaan komponen asinknron pada: