• vu2和vue3的区别


    1. 生命周期

    对于生命周期来说,整体上变化不大,只是大部分生命周期钩子名称上 + “on”,功能上是类似的。不过有一点需要注意,Vue3 在组合式API(Composition API,下面展开)中使用生命周期钩子时需要先引入,而 Vue2 在选项API(Options API)中可以直接调用生命周期钩子。

    2. 多根节点

    1. // vue2中在template里存在多个根节点会报错
    2. <template>
    3. <header>header>
    4. <main>main>
    5. <footer>footer>
    6. template>
    7. // 只能存在一个根节点,需要用一个<div>来包裹着
    8. <template>
    9. <div>
    10. <header>header>
    11. <main>main>
    12. <footer>footer>
    13. div>
    14. template>

     Vue3 支持多个根节点,也就是 fragment。

    1. <template>
    2. <header>header>
    3. <main>main>
    4. <footer>footer>
    5. template>

    3. Composition API

    Vue2 是选项API(Options API),一个逻辑会散乱在文件不同位置(data、props、computed、watch、生命周期钩子等),导致代码的可读性变差。当需要修改某个逻辑时,需要上下来回跳转文件位置。

    Vue3 组合式API(Composition API)则很好地解决了这个问题,可将同一逻辑的内容写到一起,增强了代码的可读性、内聚性,其还提供了较为完美的逻辑复用性方案。

    4. 异步组件(Suspense)

    Vue3 提供 Suspense 组件,允许程序在等待异步组件加载完成前渲染兜底的内容,如 loading ,使用户的体验更平滑。使用它,需在模板中声明,并包括两个命名插槽:default 和 fallback。Suspense 确保加载完异步内容时显示默认插槽,并将 fallback 插槽用作加载状态。

    1. <tempalte>
    2.  <suspense>
    3.    <template #default>
    4.      <List />
    5.    template>
    6.    <template #fallback>
    7.      <div>
    8.       Loading...
    9.      div>
    10.    template>
    11.  suspense>
    12. template>

    在 List 组件(有可能是异步组件,也有可能是组件内部处理逻辑或查找操作过多导致加载过慢等)未加载完成前,显示 Loading...(即 fallback 插槽内容),加载完成时显示自身(即 default 插槽内容)

    5.双向数据绑定方式

    Vue2.0 实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。

    Vue3.0 用原生 Proxy 替换 Object.defineProperty。

    在 Vue 中,Object.defineProperty 无法监控到数组下标的变化,导致直接通过数组的下标给数组设置值,不能实时响应。

    Object.defineProperty只能劫持对象的属性,因此我们需要对每个对象的每个属性进行遍历。Vue 2.x里,是通过 递归 + 遍历 data 对象来实现对数据的监控的,如果属性值也是对象那么需要深度遍历,显然如果能劫持一个完整的对象是才是更好的选择。

    而要取代它的Proxy有以下两个优点;

    可以劫持整个对象,并返回一个新对象
    有13种劫持操作
    既然Proxy能解决以上两个问题,而且Proxy作为es6的新属性在vue2.x之前就有了,为什么vue2.x不使用Proxy呢?一个很重要的原因就是:

    Proxy是es6提供的新特性,兼容性不好。

  • 相关阅读:
    使用matlab产生二维动态曲线视频文件具体举例
    729. 我的日程安排表 I :「模拟」&「线段树(动态开点)」&「分块 + 位运算(分桶)」
    Maven项目快速打包
    Tomcat进程占用CPU过高怎么办?
    【计算机网络笔记三】传输层
    亚信科技AntDB数据库携“U8C+AntDB联合产品”亮相“2023全球商业创新大会”,开启生态合作新篇章
    计算机网络——理论知识总结(下)
    《独行月球》
    Go短网址项目实战---上
    Flutter异步与线程详解
  • 原文地址:https://blog.csdn.net/m0_72759446/article/details/133746860