• vue3-新特性



    前言

    vue3 一些新特性


    Vue 3 带来了许多新特性和改进,以下是一些主要的更新:

    性能提升

    1. 性能提升:Vue 3 在性能方面进行了优化,包括更快的虚拟 DOM 重写和组件初始化速度。

    Composition API

    1. Composition API:引入了新的组合式 API,提供了一种更灵活的方式来组织组件逻辑,特别是在处理复杂组件时。

    更好的 TypeScript 支持

    1. 更好的 TypeScript 支持:Vue 3 对 TypeScript 提供了更好的支持,允许开发者在组件中使用 TypeScript 进行类型注解。

    响应式系统的改进

    1. 响应式系统的改进:Vue 3 使用 Proxy 代替了 Object.defineProperty 来实现响应式,这使得 Vue 可以更容易地追踪变化,并且对 Vue 的响应式系统进行了优化。

    新的内置组件

    1. 新的内置组件:Vue 3 引入了几个新的内置组件,如 Fragment、Teleport 和 Suspense,这些组件提供了更多的灵活性和控制。

    Teleport

    1. Teleport:一个新的内置组件,允许将组件的子节点传送到 DOM 的其他部分。
      Vue 3 引入了两个新的内置组件:Teleport 和 Suspense,它们为开发者提供了更灵活和强大的界面构建能力。

    Teleport 组件可以将模板的一部分传送到 DOM 的其他位置。这在创建模态框、弹出层等需要脱离正常文档流的 UI 组件时非常有用。

    基本用法:

    <template>
      <div id="app">
        <teleport to="#modal-container">
          <modal>这是一个模态框。modal>
        teleport>
      div>
    template>
    
    <script setup>
    import { Teleport } from 'vue';
    
    // 假设这是定义在其他地方的 Modal 组件
    const Modal = () => '
    模态框内容
    '
    ;
    script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在上面的示例中,Modal 组件的内容将被传送到页面上具有 id=“modal-container” 的元素中。

    Suspense

    1. Suspense:允许在等待异步依赖项时显示回退内容,这使得异步组件的加载更加灵活和友好。
      Suspense 组件用于异步组件的加载状态管理,它可以提供更好的用户界面反馈,例如在组件加载完成前显示加载指示器。
    <template>
      <suspense>
        <template #default>
          <async-component />
        template>
        <template #fallback>
          加载中...
        template>
      suspense>
    template>
    
    <script setup>
    import { Suspense } from 'vue';
    import { defineAsyncComponent } from 'vue';
    
    const AsyncComponent = defineAsyncComponent(() => import('./AsyncComponent.vue'));
    script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    设置弱网情况下,效果更加明显。

    可以将 Teleport 和 Suspense 结合使用来创建一个在页面其他位置加载的模态框,并且在模态框内容加载期间显示加载状态

    <template>
      <div id="app">
        <suspense>
          <template #default>
            <teleport to="#modal-container">
              <async-modal />
            teleport>
          template>
          <template #fallback>
            <div>Loading modal...div>
          template>
        suspense>
      div>
    template>
    
    <script setup>
    import { Suspense, Teleport } from 'vue';
    import { defineAsyncComponent } from 'vue';
    
    // 异步加载的模态框组件
    const AsyncModal = defineAsyncComponent(() => import('./AsyncModal.vue'));
    script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这个例子中,AsyncModal 是一个异步组件,它的内容将被 Teleport 传送到页面上的 #modal-container。在 AsyncModal 加载期间,用户会看到一个加载指示器。

    自定义渲染器 API

    1. 自定义渲染器 API:Vue 3 提供了一个自定义渲染器 API,允许开发者创建自定义的渲染器。

    Tree-Shaking 支持

    1. Tree-Shaking 支持:Vue 3 支持 Tree-Shaking,这意味着未使用的代码可以被移除,从而减小最终的打包体积。

    全局 API 的更改

    1. 全局 API 的更改:Vue 3 对全局 API 进行了调整,将许多全局 API 移动到了应用实例(app)上,使得 API 设计更加一致。

    生命周期钩子的变化

    1. 生命周期钩子的变化:Vue 3 引入了新的生命周期钩子,并更改了一些现有生命周期钩子的名称,以提供更好的生命周期控制。

    v-model 的改进

    1. v-model 的改进:Vue 3 改进了 v-model 的实现,提供了更灵活的双向数据绑定。

    v-for 和 v-if 的优先级变化

    1. v-for 和 v-if 的优先级变化:在 Vue 3 中,v-if 现在比 v-for 有更高的优先级,这意味着条件渲染现在会在循环之前执行。

    移除了过滤器(filter)

    1. 移除了过滤器(filter):Vue 3 移除了过滤器功能,推荐使用方法或计算属性来替代。

    新的组件定义方式

    1. 新的组件定义方式:在 Vue 3 中,组件现在可以通过 defineComponent 来定义,这是推荐的方式,用于替代 Vue.extend

    这些新特性使得 Vue 3 不仅在性能上有所提升,而且在开发体验和代码的可维护性上也做了很大的改进。开发者可以通过逐步迁移现有项目到 Vue 3,来利用这些新特性。

  • 相关阅读:
    竞赛选题 身份证识别系统 - 图像识别 深度学习
    Python爬虫技术在SEO优化中的关键应用和最佳实践
    grpc Java demo与Springboot改造支持grpc通信
    【微服务 32】你为Spring Cloud整合Seata、Nacos实现分布式事务案例跑不起来苦恼过吗(巨细排坑版)【云原生】
    Spring 从入门到精通 (十一) 静态代理登场
    浅谈——网络安全架构设计(二)
    根据当年节假日和非工作时间计算请假时间-获取每个月的节假日,计算每个月的工作日时间进度,节假日每年更新
    Seata0.7.1配合nacos实现分布式事务
    SQL On Pandas最佳实践
    Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)
  • 原文地址:https://blog.csdn.net/Bruce__taotao/article/details/138033379