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
PHPzke hadapan
2023-05-18 16:52:143280semak imbas

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')

  • 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>

    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
    }

    Jadi, pengisytiharan komponen tak segerak berikut:

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

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
    })

    2-3 Fungsi pemuatan komponen tak segerak mengembalikan perbandingan

2-3-1 selesaikan dan tolak:

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

  • 2-3-2 Sentiasa kembalikan Janji dalam Vue 3.x:
  • // 3.x version
    const asyncComponent = defineAsyncComponent(
      () => new Promise((resolve, reject) => {
          /* ... */
      })
    )
    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)
      },
    }

    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;),
      }
    ];
  • 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}`]
        }
        // ...          
      ],
    })
  • 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>

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam