广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >vue3异步组件怎么用
  • 394
分享到

vue3异步组件怎么用

2024-04-02 19:04:59 394人浏览 八月长安
摘要

这篇文章给大家分享的是有关vue3异步组件怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在Vue3中,异步组件可以减少打包的结果,会将异步组件

这篇文章给大家分享的是有关vue3异步组件怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Vue3中,异步组件可以减少打包的结果,会将异步组件分开打包,会采用异步的方式加载组件,可以有效的解决一个组件过大的问题;不使用异步组件,如果组件功能比较多打包出来的结果就会变大。

vue3异步组件怎么用

教程操作环境:windows7系统、vue2.9.6版,DELL G3电脑。

异步组件是 vue 的一种新能优化的方法,比如可以运用在首屏加载等等场景。

1、异步组件可以减少打包的结果。会将异步组件分开打包,会采用异步的方式加载组件,可以有效的解决一个组件过大的问题。不使用异步组件,如果组件功能比较多打包出来的结果就会变大。

2、异步组件的核心可以给组件定义变成一个函数,函数里面可以用import语法,实现文件的分割加载,import语法是webpack提供的,采用的就是JSONp。

components:{
  VideoPlay:(resolve)=>import("../components/VideoPlay")
}
 
components:{
  VideoPlay(resolve) {
    require(["../components/VideoPlay"], resolve)
  }
}
 
或者使用回调函数

原理

在createComponent方法中,会有相应的异步组件处理,首先定义一个asyncFactory变量,然后进行判断,如果组件是一个函数,然后会去调resolveAsyncComponent方法,然后将赋值在asyncFactory上的函数传进去,会让asyncFactory马上执行,执行的时候并不会马上返回结果,因为他是异步的,返回的是一个promise,这时候这个值就是undefined,然后就会先渲染一个异步组件的占位,空虚拟节点。如果加载完之后会调factory函数传入resolve和reject两个参数,执行后返回一个成功的回调和失败的回调,promise成功了就会调resolve,resolve中就会调取forceRender方法强制更新视图重新渲染,forceRender中调取的就是$forceUpdate,同时把结果放到factory.resolved上,如果强制刷新的时候就会再次走resolveAsyncComponent方法,这时候有个判断,如果有成功的结果就把结果直接放回去,这时候resolveAsyncComponent返回的就不是undefined了,就会接的创建组件,初始化组件,渲染组件。

源码

src/core/vdom/create-component.js

1、createComponent方法

export function createComponent (
  Ctor: Class<Component> | Function | Object | void,
  data: ?VnodeData,
  context: Component,
  children: ?Array<VNode>,
  tag?: string
): VNode | Array<VNode> | void {
  let asyncFactory
  if (isUndef(Ctor.cid)) { // 看组件是否是一个函数
    asyncFactory = Ctor // 异步组件一定是一个函数 新版本提供了对象的写法
    Ctor = resolveAsyncComponent(asyncFactory, baseCtor) //默认调用此函数时返回undefiend
    // 第二次渲染时Ctor不为undefined
    if (Ctor === undefined) {
      //返回async组件的占位符节点
      //作为注释节点,但保留该节点的所有原始信息
      //该信息将用于异步服务器渲染和水合。
      return createAsyncPlaceholder(
        asyncFactory,
        data,
        context,
        children,
        tag
      )
    }
  }
}

2、resolveAsyncComponent方法

export function resolveAsyncComponent (
  factory: Function,
  baseCtor: Class<Component>
): Class<Component> | void {
  // 如果有错误就返回错误结果
  if (isTrue(factory.error) && isDef(factory.errorComp)) {
    return factory.errorComp
  }
  // 再次渲染时可以拿到获取的最新组件
  // 如果有成功的结果,就直接返回去
  if (isDef(factory.resolved)) {
    return factory.resolved
  }
 
  if (owner && !isDef(factory.owners)) {
    // forceRender 强制刷新渲染
    const forceRender = (renderCompleted: boolean) => {
      for (let i = 0, l = owners.length; i < l; i++) {
        (owners[i]: any).$forceUpdate() // 执行$forceUpdate
      }
    }
    // 成功
    const resolve = once((res: Object | Class<Component>) => {
      factory.resolved = ensureCtor(res, baseCtor)
      if (!sync) {
        forceRender(true) // 执行强制更新视图重新渲染方法
      } else {
        owners.length = 0
      }
    })
    // 失败
    const reject = once(reason => {
      if (isDef(factory.errorComp)) {
        factory.error = true
        forceRender(true)
      }
    })
 
    // 执行factory 将resolve方法和reject方法传入
    const res = factory(resolve, reject)
 
    sync = false
    return factory.loading ? factory.loadinGComp : factory.resolved // 返回结果
  }
}

3、createAsyncPlaceholder 方法

// 创建一个异步组件的占位,空虚拟节点   也就是一个注释<!-->
export function createAsyncPlaceholder (
  factory: Function,
  data: ?VNodeData,
  context: Component,
  children: ?Array<VNode>,
  tag: ?string
): VNode {
  const node = createEmptyVNode()
  node.asyncFactory = factory
  node.asyncMeta = { data, context, children, tag }
  return node
}

感谢各位的阅读!关于“vue3异步组件怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: vue3异步组件怎么用

本文链接: https://www.lsjlt.com/news/87982.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue3异步组件怎么用
    这篇文章给大家分享的是有关vue3异步组件怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在vue3中,异步组件可以减少打包的结果,会将异步组件...
    99+
    2022-10-19
  • Vue3异步组件Suspense怎么使用
    今天小编给大家分享一下Vue3异步组件Suspense怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Suspense...
    99+
    2023-07-06
  • Vue3中的异步组件defineAsyncComponentAPI怎么使用
    传递工厂函数作为参数defineAsyncComponent方法接收一个工厂函数是它的基本用法,这个工厂函数必须返回一个Promise,Promise的resolve应该返回一个组件。我们这里以Vue Cli创建的项目为例,这里我稍微做了一...
    99+
    2023-05-21
    Vue3
  • Vue3异步组件有什么变化
    今天小编给大家分享一下Vue3异步组件有什么变化的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先我们来看一下有关于异步组件...
    99+
    2023-06-27
  • Vue3异步组件suspense使用详解
    目录结合elementui 使用 vue在解析我们的组件时, 是通过打包成一个 js 文件,当我们的一个组件 引入过多子组件是,页面的首屏加载时间 由最后一个组件决定 优化的一种方式...
    99+
    2022-12-28
    Vue3 异步组件 suspense Vue3 组件 suspense
  • Vue3异步组件Suspense如何使用
    这篇文章主要介绍了Vue3异步组件Suspense如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3异步组件Suspense如何使用文章都会有所收获,下面我们一起来看看吧。Suspense组件官网中...
    99+
    2023-07-05
  • vue3 vite异步组件及路由懒加载怎么应用
    一、前言1-1.三点变化:异步组件声明方法的改变:Vue 3.x 新增一个辅助函数defineAsyncComponent,用来显示声明异步组件异步组件高级声明方法中的 component 选项更名为loaderloader绑定的组件加载函...
    99+
    2023-05-18
    Vue3 vite
  • Vue3异步组件Suspense的使用方法详解
    Suspense组件 官网中有提到他是属于实验性功能:<Suspense> 是一项实验性功能。它不一定会最终成为稳定功能,并且在稳定之前相关 API 也可能会发...
    99+
    2023-01-28
    Vue3异步组件 Vue3异步组件Suspense的使用方法
  • Vue异步组件怎么用
    这篇文章将为大家详细讲解有关Vue异步组件怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、引入我们在讲异步组件之前,我们再来回顾一下webpack打包时的分包操作。我们可以使用import()异步...
    99+
    2023-06-29
  • Vue异步组件怎么使用
    本篇内容主要讲解“Vue异步组件怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue异步组件怎么使用”吧!1、前置要求建议使用webpack;Browserify在默认情况下不支持;2、...
    99+
    2023-07-04
  • 一文搞懂Vue3中的异步组件defineAsyncComponentAPI的用法
    目录前言传递工厂函数作为参数传递对象类型作为参数总结前言 当我们的项目达到一定的规模时,对于某些组件来说,我们并不希望一开始全部加载,而是需要的时候进行加载;这样的做得目的可以很好的...
    99+
    2022-11-13
  • Vue3异步数据加载组件suspense的使用方法
    目录前言创建组件 总结 前言 Vue3 增加了很多让人眼前一亮的特征,suspense 组件就是其中之一,对处理异步请求数据非常实用,本文通过简单的实例介绍其使用方法,如对其有兴趣,...
    99+
    2022-11-12
  • Vue3中如何使用suspense异步数据加载组件
    Vue3中如何使用suspense异步数据加载组件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言Vue3 增加了很多让人眼前一亮的特征,suspense 组件就是其中之一,...
    99+
    2023-06-20
  • Vue动态组件与异步组件怎么使用
    这篇“Vue动态组件与异步组件怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue动态组件与异步组件怎么使用”文章吧...
    99+
    2023-07-05
  • Vue3组件异步更新和nextTick运行机制是什么
    这篇文章主要讲解了“Vue3组件异步更新和nextTick运行机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3组件异步更新和nextTick运行机制是什么”吧!组件的异步更新...
    99+
    2023-07-06
  • vue3 table组件怎么使用
    基础表格首先开发table组件之前,先想好要用什么样式的api,因为笔者在生产工作中用的都是element,所以前面几个组件风格和element类似,但是这次不打算用element的风格了,打算换一种,直接展示:我们期望用户这样使用:<...
    99+
    2023-05-14
    Vue3 table
  • Vue3复用组件怎么使用
    我们看到,createReusableTemplate 返回了一个 Tuple,即 define 和 reuse 的组件对,然后,通过上面的例子就可以在单文件里面复用多处代码了。还有,实际上还可以通过对象解构的方式返回一个 define 和...
    99+
    2023-05-20
    Vue3
  • Vue3怎么封装组件
    这篇文章主要讲解了“Vue3怎么封装组件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3怎么封装组件”吧!例如我们在使用element的标签页tabs组件时,如下图所示:tabs组件可...
    99+
    2023-07-05
  • vue3动态组件怎么使用
    这篇文章主要介绍“vue3动态组件怎么使用”,在日常操作中,相信很多人在vue3动态组件怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue3动态组件怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-06
  • Vue3之Teleport组件怎么使用
    Teleport 组件解决的问题版本:3.2.31如果要实现一个 “蒙层” 的功能,并且该 “蒙层” 可以遮挡页面上的所有元素,通常情况下我们会选择直接在 标签下渲染 “蒙层” 内容。如果在Vue.js 2 中实现这个功能,只能通过原生 D...
    99+
    2023-05-14
    Vue3 teleport
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作