[译] Vue 3 迁移策略 —— 异步组件(破坏性改动)__Vue.js
发布于 4 年前 作者 banyungong 1844 次浏览 来自 分享
粉丝福利 : 关注VUE中文社区公众号,回复视频领取粉丝福利

需要调研 vue 2 到 vue 3 的迁移方案,来做内部分享。

我看网上貌似目前只有一人翻译了,翻译了前几章。

但是我着急用,只能自己翻了。译者四级没过,全靠有道和谷歌了。

vue 3 官方文档原文—— async components

异步组件 new/breaking

概览

以下是改动的简要概述:

  • 使用新的 defineAsyncComponent 辅助函数显式定义异步组件
  • component 选项已重命名为 loader
  • 加载程序函数本身不接收 resolvereject 参数,并且必须返回 Promise

介绍

2.x 语法

以前,异步组件是通过简单地将组件定义为一个返回 Promise 的函数来创建的,例如:

const asyncPage = () => import('./NextPage.vue')

或者,带有选项的高级组件语法:

const asyncPage = {
  component: () => import('./NextPage.vue'),
  delay: 200,
  timeout: 3000,
  error: ErrorComponent,
  loading: LoadingComponent
}

3.x 语法

现在在 Vue 3 中,由于 函数式组件 被定义为纯函数,因此需要用 defineAsyncComponent 辅助函数将 异步组件 包装起来的方式来显式定义异步组件:

import { defineAsyncComponent } from 'vue'
import ErrorComponent from './components/ErrorComponent.vue'
import LoadingComponent from './components/LoadingComponent.vue'

// 没有配置项的异步函数
const asyncPage = defineAsyncComponent(() => import('./NextPage.vue'))

// 有配置项的异步函数
const asyncPageWithOptions = defineAsyncComponent({
  loader: () => import('./NextPage.vue'),
  delay: 200,
  timeout: 3000,
  errorComponent: ErrorComponent,
  loadingComponent: LoadingComponent
})

相对于 2.x 来说,另外一个改变是 component 选项现在被重命名为 loader,以便准确地传达不能直接提供组件定义的信息。

import { defineAsyncComponent } from 'vue'

const asyncPageWithOptions = defineAsyncComponent({
  loader: () => import('./NextPage.vue'), // loader option
  delay: 200,
  timeout: 3000,
  error: ErrorComponent,
  loading: LoadingComponent
})

此外,与 2.x 不同,加载函数不再接收 resolvereject 参数,并且必须始终返回Promise。

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

// 3.x version
const asyncComponent = defineAsyncComponent(
  () =>
    new Promise((resolve, reject) => {
      /* ... */
    })
)
```<p style="line-height: 20px; color: #ccc">
        版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
        作者: zhaozhe0831
        原文链接:<a href='https://juejin.im/post/6865126806073294861'>https://juejin.im/post/6865126806073294861</a>
      </p>
回到顶部