Rumah > hujung hadapan web > View.js > teks badan

Penjelasan terperinci tentang fungsi defineAsyncComponent dalam Vue3: aplikasi komponen pemuatan tak segerak

WBOY
Lepaskan: 2023-06-18 19:39:08
asal
9883 orang telah melayarinya

Penjelasan terperinci tentang fungsi defineAsyncComponent dalam Vue3: Aplikasi pemuatan asynchronous komponen

Dalam Vue3, kami sering menghadapi keperluan untuk memuatkan komponen secara tidak segerak. Pada masa ini, kita boleh menggunakan fungsi defineAsyncComponent yang disediakan oleh Vue3 untuk melaksanakan fungsi memuatkan komponen secara tidak segerak. Artikel ini akan memperkenalkan secara terperinci senario penggunaan dan aplikasi fungsi defineAsyncComponent dalam Vue3.

1. Definisi fungsi defineAsyncComponent

defineAsyncComponent ialah fungsi dalam Vue3, digunakan untuk memuatkan komponen secara tidak segerak. Ia ditakrifkan seperti berikut:

function defineAsyncComponent(loader) {
  if (__VUE_OPTIONS_API__) {
    return { __asyncLoader: loader, name: 'AsyncComponentWrapper' }
  }

  const AsyncComponent = defineComponent({
    name: 'AsyncComponentWrapper',
    setup() {
      const resolvedComponent = ref(null)
      const error = ref(null)
      const loading = ref(false)

      if (!loader) {
        error.value = new Error(`Error in async component: loader is undefined`)
      } else {
        loading.value = true
        loader().then((component) => {
          resolvedComponent.value = normalizeComponent(component)
        }).catch((err) => {
          error.value = err
        }).finally(() => {
          loading.value = false
        })
      }

      return { resolvedComponent, error, loading }
    },
    render() {
      const { resolvedComponent, error, loading } = this
      if (resolvedComponent) {
        return h(resolvedComponent)
      } else if (error) {
        throw error
      } else if (loading) {
        return h('div', 'Loading...')
      }
    }
  })

  AsyncComponent.__asyncLoader = loader

  return AsyncComponent
}
Salin selepas log masuk

Seperti yang dapat dilihat daripada kod, fungsi defineAsyncComponent memerlukan fungsi pemuat sebagai parameter, yang sepatutnya mengembalikan Promise dan akhirnya mengembalikan komponen dalam fungsi menyelesaikan.

2. Penggunaan fungsi defineAsyncComponent

Dengan fungsi defineAsyncComponent, kita boleh menggunakannya untuk mentakrifkan fungsi yang memuatkan komponen secara tidak segerak. Contohnya:

import { defineAsyncComponent } from 'vue'

const AsyncComponent = defineAsyncComponent(() => {
  // 通过import函数异步加载组件
  return import('./components/AsyncComponent.vue')
})

export default {
  components: {
    AsyncComponent
  }
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menggunakan fungsi defineAsyncComponent untuk mentakrifkan fungsi AsyncComponent yang memuatkan komponen secara tidak segerak dan menggunakannya sebagai subkomponen komponen kami dan menggunakannya di dalam komponen.

Selain menggunakan fungsi import untuk memuatkan secara tak segerak, kami juga boleh menggunakan kaedah pemuatan tak segerak yang lain, seperti:

const AsyncComponent = defineAsyncComponent(() => {
  // 使用动态import路径异步加载组件
  return import(`./components/${componentName}.vue`)
})
Salin selepas log masuk

Melalui kaedah di atas, kami boleh memuatkan laluan komponen yang berbeza secara dinamik dan menggunakan defineAsyncComponent berfungsi dengan lebih fleksibel.

Apabila menggunakan komponen pemuatan tak segerak, kita perlu memberi perhatian kepada beberapa butiran. Secara umumnya, kita perlu menentukan strategi caching untuk komponen yang dimuatkan secara tak segerak untuk mengelakkan memuatkan komponen yang sama berulang kali. Kita boleh menggunakan komponen keepAlive yang disediakan oleh Vue untuk melaksanakan strategi caching. Contohnya:

<template>
  <div>
    <keep-alive>
      <AsyncComponent :key="componentKey" />
    </keep-alive>
    <button @click="changeComponent">Change Component</button>
  </div>
</template>

<script>
import { defineAsyncComponent, ref } from 'vue'

export default {
  setup() {
    const componentKey = ref(0)

    const changeComponent = () => {
      // 每次更改组件的时候更新key,使组件重新渲染
      componentKey.value++
    }

    const AsyncComponent = defineAsyncComponent(() => {
      return import('./components/AsyncComponent.vue')
    })

    return { componentKey, changeComponent, AsyncComponent }
  }
}
</script>
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan kekunci komponen pembilang untuk mengemas kini nilai kunci komponen, menyebabkan komponen yang dimuatkan secara tak segerak dipaparkan semula. Kami juga membalut komponen pemuatan tak segerak dalam komponen kekal hidup untuk melaksanakan strategi caching.

3. Senario aplikasi fungsi defineAsyncComponent

Pemuatan tak segerak bagi komponen mempunyai pelbagai senario aplikasi, terutamanya dalam aplikasi berbilang halaman, di mana komponen halaman yang berbeza selalunya perlu dimuatkan secara dinamik mengikut keperluan pengguna. Selain itu, Vue3 juga menyokong penggunaan fungsi defineAsyncComponent untuk memuatkan pelbagai komponen lain secara tak segerak seperti arahan, pemalam, templat, dsb.

Dalam Vue3, fungsi defineAsyncComponent telah menjadi salah satu cara standard untuk melaksanakan pemuatan tak segerak bagi komponen dan merupakan bahagian penting dalam rangka kerja Vue3. Dengan mempelajari senario penggunaan dan aplikasi fungsi defineAsyncComponent, kita boleh memahami dengan lebih baik intipati rangka kerja Vue3 dan menggunakannya secara fleksibel pada pembangunan projek.

Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi defineAsyncComponent dalam Vue3: aplikasi komponen pemuatan tak segerak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan