Vue3.0的新特性(8)Suspense

28 篇文章 0 订阅

Suspense是Vue3推出的一个内置组件,它允许我们的程序在等待异步组件时渲染一些后备的内容,可以让我们创建一个平滑的用户体验;Vue中加载异步组件其实在Vue2.x中已经有了,我们用的vue-router中加载的路由组件其实也是一个异步组件:

export default {
  name: "Home",
  components: {
    AsyncButton: () => import("../components/AsyncButton"),
  },
}

在Vue3中重新定义,异步组件需要通过defineAsyncComponent来进行显示的定义:

// 全局定义异步组件
//src/main.js
import { defineAsyncComponent } from "vue";
const AsyncButton = defineAsyncComponent(() =>
  import("./components/AsyncButton.vue")
);
app.component("AsyncButton", AsyncButton);


// 组件内定义异步组件
// src/views/Home.vue
import { defineAsyncComponent } from "vue";
export default {
  components: {
    AsyncButton: defineAsyncComponent(() =>
      import("../components/AsyncButton")
    ),
  },
};

同时对异步组件的可以进行更精细的管理:

export default {
  components: {
    AsyncButton: defineAsyncComponent({
      delay: 100,
      timeout: 3000,
      loader: () => import("../components/AsyncButton"),
      errorComponent: ErrorComponent,
      onError(error, retry, fail, attempts) {
        if (attempts <= 3) {
          retry();
        } else {
          fail();
        }
      },
    }),
  },
};

这样我们对异步组件加载情况就能掌控,在加载失败也能重新加载或者展示异常的状态:
在这里插入图片描述
[表情]异步组件加载失败
我们回到Suspense,上面说到它主要是在组件加载时渲染一些后备的内容,它提供了两个slot插槽,一个default默认,一个fallback加载中的状态:

<template>
  <div>
    <button @click="showButton">展示异步组件</button>
    <template v-if="isShowButton">
      <Suspense>
        <template #default>
          <AsyncButton></AsyncButton>
        </template>
        <template #fallback>
          <div>组件加载中...</div>
        </template>
      </Suspense>
    </template>
  </div>
</template>
<script>
export default {
  setup() {
    const isShowButton = ref(false);
    function showButton() {
      isShowButton.value = true;
    }
    return {
      isShowButton,
      showButton,
    };
  },
}
</script>

在这里插入图片描述
异步组件加载显示占位

非兼容的功能

非兼容的功能主要是一些和Vue2.x版本改动较大的语法,已经在Vue3上可能存在兼容问题了。

请添加图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue3.的新特性包括: 1. 更快的渲染速度和更小的包大小 2. 更好的TypeScript支持 3. 更好的响应式系统 4. 更好的组合API 5. 更好的性能优化 Vue3.与Vue2.的区别包括: 1. Vue3.使用了Proxy代替了Object.defineProperty来实现响应式系统,提高了性能和可维护性。 2. Vue3.的组合API更加灵活,可以更好地组织和复用代码。 3. Vue3.的模板编译器也进行了优化,可以更好地支持动态组件和slot。 4. Vue3.的包大小更小,性能更好,同时也更容易进行Tree-shaking和按需加载。 5. Vue3.的TypeScript支持更加完善,可以更好地进行类型检查和代码提示。 ### 回答2: Vue 3.0是Vue框架的最新版本,引入了很多新特性和改进,具体来说包括以下方面: 1.性能提升:Vue 3.0 引入了 Compiler 提升,同时使用了新的响应式系统和虚拟 DOM,使得整个框架的性能得到了很大程度的提升。 2. Composition API:在Vue 2.0中,我们常用的API是Options API,随着组件的复杂程度增加,Options API的代码逐渐变得冗长难以维护。为此Vue 3.0中引入了Composition API,该API采用函数式编程的思想,将组件内的逻辑进行聚合,比如可以将一个组件的生命周期和状态管理都放在一个函数内,提升了代码的可读性和可维护性。 3. Fragment支持:在Vue 2.0中,如果有多个根节点需要渲染,则必须使用一个外部的容器来包裹这些根节点。但这种方式不太优雅,可能会导致布局的混乱。Vue 3.0 中,支持使用 Fragment来解决这个问题,即多个根节点可以直接进行渲染。 4. Teleport:Vue 3.0 中的 Teleport 组件可以帮助我们将某个组件挂载到 DOM 结构中某个特定的父节点中。即一个组件可以在 DOM 树的任意位置进行渲染,解决了Vue 2.0的 Portal的问题,实现了更加灵活的组件渲染。 5. 改进的 TypeScript 支持:Vue 3.0 改进了 TypeScript 的定义文件,使得开发人员可以更加方便地使用 TypeScript 进行开发。 总体来说,Vue 3.0相比于 Vue 2.0,在性能和开发体验方面都有明显的提升,特别是Composition API的引入,可以大大提高代码的可读性和可维护性,使得Vue框架更加适合大型复杂应用的开发。 ### 回答3: Vue.js是一款流行的前端JavaScript框架,其主要特点是轻量级、高效率和易于使用。随着时间的推移,Vue.js的版本也在不断更新,其中最新版本的Vue.js 3.0引入了一些新的功能和改进,与Vue.js 2.0相比,其最大的差异在于性能和开发效率方面有了显著的提升。 1. 更快的渲染速度和更小的包大小: Vue.js 3.0采用了新的响应式系统Reactivity API,并重新设计了内部架构。这些设计使Vue.js 3.0的性能优于Vue.js 2.0,特别是在大规模应用程序中。此外,Vue.js 3.0采用了Tree-shaking技术,这使得Vue.js 3.0包的大小比Vue.js 2.0小30%以上。 2. 新的追踪机制: Vue.js 3.0采用了Proxy对象来改进响应式追踪的性能,这意味着当响应式对象发生变化时,只会触发必要的重渲染。这样可以避免不必要的DOM操作和渲染,从而提高Vue.js的整体性能。 3. Composition API: Vue.js 3.0引入了Composition API,这是一种新的API风格,旨在更好地组织Vue.js代码,使其更易于维护和重用。 Composition API 使得Vue.js的组件代码更像传统的JavaScript函数,而不是基于对象的API风格。 4. 更好的TypeScript支持: Vue.js 3.0通过更好的TypeScript定义支持来提高类型安全性。Vue.js 3.0还提供了新的 TypeScript 类型声明文件,这可以使得开发者在使用TypeScript时,享受到精确的代码补全和类型检测。 总之,Vue.js 3.0的新特性主要集中在性能、开发效率和组件复用等方面。除了上述功能之外,Vue.js 3.0还引入了其他一些改进,例如更好的错误处理、更高效的动态渲染API和生命周期API等。所有这些功能的加入都意味着Vue.js 3.0将成为未来大规模应用程序的理想选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值