Rumah > hujung hadapan web > View.js > Cara menggunakan pemuatan malas komponen dan penghalaan tak segerak vue3 vite

Cara menggunakan pemuatan malas komponen dan penghalaan tak segerak vue3 vite

PHPz
Lepaskan: 2023-05-18 16:52:14
ke hadapan
3295 orang telah melayarinya

1. Kata Pengantar

1-1 Tiga perubahan:

  • Perubahan dalam kaedah pengisytiharan komponen tak segerak: Vue 3.x menambah fungsi tambahan baru defineAsyncComponent, Digunakan untuk mengisytiharkan komponen tak segerak secara eksplisit

  • Pilihan komponen dalam kaedah pengisytiharan lanjutan komponen tak segerak dinamakan semula kepada pemuat

  • Fungsi pemuatan komponen terikat oleh pemuat bukan Kemudian terima parameter tentukan dan tolak, dan mesti mengembalikan Janji

1-2 Sebab untuk memperkenalkan fungsi tambahan defineAsyncComponent:

Sekarang, dalam. Vue 3, disebabkan oleh fungsi Komponen ditakrifkan sebagai fungsi tulen, takrifan komponen async perlu ditakrifkan secara eksplisit dengan membungkusnya dalam pembantu defineAsyncComponent baharu.

2. Perbandingan takrifan Vue 2.x dan Vue 3.x

2-1. -1 -1. Dalam Vue 2.x, isytiharkan komponen tak segerak seperti ini:

  • const asyncPage = () => import('./views/home.vue')
    Salin selepas log masuk
    Salin selepas log masuk

  • 2-1-2, Import komponen tak segerak memerlukan pengisytiharan eksplisit menggunakan fungsi tambahan defineAsyncComponent. Seperti berikut:
  • <template>
      <div>
        <h2>Async Components</h2>
        <p>异步组件测试</p>
        <child />
      </div>
    </template>
    <script>
    import { defineAsyncComponent } from &#39;vue&#39;
    const child = defineAsyncComponent(() => import(&#39;@/components/async-component-child.vue&#39;))
    export default {
      name: &#39;async-components&#39;,
      components:{
        &#39;child&#39;: child
      }
    };
    </script>
    Salin selepas log masuk

    2-2 Perbandingan kaedah pengisytiharan

2-2-1 .x ialah Cara pengisytiharan yang lebih maju. Seperti berikut:

  • const asyncPageWithOptions  = {
      component: () => import(&#39;./views/home.vue&#39;),
      delay: 200,
      timeout: 3000,
      error: ErrorComponent,
      loading: LoadingComponent
    }
    Salin selepas log masuk

    Jadi, pengisytiharan komponen tak segerak berikut:

    const asyncPage = () => import(&#39;./views/home.vue&#39;)
    Salin selepas log masuk
    Salin selepas log masuk
  • bersamaan dengan:
const asyncPageWithOptions  = {
  component: () => import(&#39;./views/home.vue&#39;)
}
Salin selepas log masuk

2- 2 -2 Komponen tak segerak juga boleh diisytiharkan seperti ini dalam Vue 3.x. Hanya komponen yang perlu ditukar kepada pemuat. Seperti berikut:

  • const asyncPageWithOptions  = defineAsyncComponent({
      loader: () => import(&#39;./views/home.vue&#39;),
      delay: 200,
      timeout: 3000,
      error: ErrorComponent,
      loading: LoadingComponent
    })
    Salin selepas log masuk

    2-3 Fungsi pemuatan komponen tak segerak mengembalikan perbandingan

2-3-1 selesaikan dan tolak:

  • // 2.x version
    const oldAsyncComponent = (resolve, reject) => {
      /* ... */
    }
    Salin selepas log masuk

  • 2-3-2 Sentiasa kembalikan Janji dalam Vue 3.x:
  • // 3.x version
    const asyncComponent = defineAsyncComponent(
      () => new Promise((resolve, reject) => {
          /* ... */
      })
    )
    Salin selepas log masuk
    < 🎜. >Fungsi pemuatan komponen asynchronous Vue 3.x tidak akan menerima penyelesaian dan penolakan lagi, dan mesti sentiasa mengembalikan Promise. Dalam erti kata lain, dalam Vue 3.x, ia tidak lagi disokong untuk menerima panggilan balik penyelesaian melalui fungsi kilang untuk menentukan komponen tak segerak.

    // 在 Vue 3.x 中不适用
    export default {
      components: {
        asyncPage: resolve => require([&#39;@/components/list.vue&#39;], resolve)
      },
    }
    Salin selepas log masuk

    3. Latihan Vue3
Petua: Jika anda menggunakan alat vite untuk membina projek, gunakan import untuk melakukan penghalaan pemuatan malas semasa pembangunan tempatan Ia boleh dimuatkan seperti biasa, tetapi amaran akan dilaporkan; membungkusnya untuk pengeluaran Persekitaran akan melaporkan ralat dan halaman tidak akan dipaparkan seperti biasa Anda boleh menggunakan dua kaedah berikut untuk mencapainya.

3-1. Menghalakan pelaksanaan pemuatan malas

3-1-1.defineAsyncComponent method

    // router/index.js
    import { defineAsyncComponent } from &#39;vue&#39;
    const _import = (path) => defineAsyncComponent(() => import(`../views/${path}.vue`));
    const routes = [
      {
        path: &#39;/async-component&#39;,
        name: &#39;asyncComponent&#39;,
        component: _import(&#39;home&#39;),
      }
    ];
    Salin selepas log masuk
  • kaedah 3-1-2.import.meta.glob
    // 1.上面的方法相当于一次性加载了 views 目录下的所有.vue文件,返回一个对象
    const modules = import.meta.glob(&#39;../views/*/*.vue&#39;);
    const modules ={
        "../views/about/index.vue": () => import("./src/views/about/index.vue")
    }
    // 2.动态导入的时候直接,引用
    const router = createRouter({
      history: createWebHistory(),
      routes: [
        // ...
        {
          path: &#39;xxxx&#39;,
          name: &#39;xxxxx&#39;,
          // 原来的方式,这个在开发中可行,但是生产中不行
          // component: () => import(`../views${menu.file}`),
          // 改成下面这样
          component: modules[`../views${filename}`]
        }
        // ...          
      ],
    })
    Salin selepas log masuk
  • 3-2 Pelaksanaan komponen tak segerak

    <template>
      <div>
        <h2>Async Components</h2>
        <p>异步组件测试</p>
        <child></child>
      </div>
    </template>
    <script>
    import { defineAsyncComponent } from &#39;vue&#39;
    const child = defineAsyncComponent(() => import(&#39;@/components/async-component-child.vue&#39;))
    export default {
      name: &#39;async-components&#39;,
      components:{
        &#39;child&#39;: child
      }
    };
    </script>
    Salin selepas log masuk

Atas ialah kandungan terperinci Cara menggunakan pemuatan malas komponen dan penghalaan tak segerak vue3 vite. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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