最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue3对比Vue2

    正文概述 掘金(小蝉儿)   2021-05-30   475

    使用vue2也有好几年了,vue3出来后立马去官网学习并使用了一下,以下梳理一些自己的感悟。

    1.为什么要有vue3

    我们使用vue2常常会遇到一些体验不太好的地方,比如:

    1. 随着功能的增长,需求的增加,复杂组件的代码越来越难以维护,逻辑混乱,虽然vue2也有一些复用的方法,但是都存在一定的弊端,比如我们常常用的Mixin,特别容易发生命名冲突,暴露出来的变量意图不是很明显,重用到其他组件容易冲突。

    2. vue2对于typeScript的支持非常有限,没有考虑到ts的集成。

    vue3的出现就是为了解决vue2的弊端,其composition API很好的解决了逻辑复用的问题,而且vue3源码就是用ts写的,对ts的支持非常好。我们在开发项目过程中可以使用ts的加持,使代码更加健壮。

    2.vue3的优点

    1. vue3支持vue2的大多数特性,实现对vue2的兼容
    2. vue3对比vue2具有明显的性能提升
      • 打包大小减少41%
      • 初次渲染快55%,更新快133%
      • 内存使用减少54%
    3. vue3具有的composition API实现逻辑模块化和重用
    4. 增加了新特性,如Teleport组件,全局API的修改和优化等

    3.响应式原理的不同

    Vue2.x实现双向数据绑定原理,是通过es5的 Object.defineProperty,根据具体的key去读取和修改。其中的setter方法来实现数据劫持的,getter实现数据的修改。但是必须先知道想要拦截和修改的key是什么,所以vue2对于新增的属性无能为力,比如无法监听属性的添加和删除、数组索引和长度的变更,vue2的解决方法是使用Vue.set(object, propertyName, value) 等方法向嵌套对象添加响应式。

    Vue3.x使用了ES2015的更快的原生proxy 替代 Object.defineProperty。Proxy可以理解成,在对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy可以直接监听对象而非属性,并返回一个新对象,具有更好的响应式支持

    4.生命周期的不同

    beforeCreate -> 请使用 setup()

    created -> 请使用 setup()

    beforeMount -> onBeforeMount

    mounted -> onMounted

    beforeUpdate -> onBeforeUpdate

    updated -> onUpdated

    beforeDestroy -> onBeforeUnmount

    destroyed -> onUnmounted

    errorCaptured -> onErrorCaptured

    如果要想在页面中使用生命周期函数,以往vue2的操作是直接在页面中写入生命周期,而vue3是需要去引用的,这就是为什么3能够将代码压缩到更低的原因

    5.默认项目目录结构的不同

    vue3移除了配置文件目录,config 和 build 文件夹,移除了 static 文件夹,新增 public 文件夹,并且 index.html 移动到 public 中,在 src 文件夹中新增了 views 文件夹,用于分类视图组件和公共组件

    6.vue3对全局API的优化

    在 Vue3 中,全局和内部 API 都经过了重构,并考虑到了 tree-shaking 的支持。因此,全局 API现在只能作为 ES 模块构建的命名导出进行访问。

    import { nextTick } from 'vue'
    nextTick(() => {
      // 一些和DOM有关的东西
    })
    

    入口文件

    // vue2写法
    // vue2全局配置的修改,会修改Vue对象的属性
    // 在不同的app中,共享一份有着不同配置的Vue对象,也变得非常困难
    import Vue from 'vue'
    import App from './App.vue'
    Vue.config.xx=xx
    Vue.use(...)
    Vue.mixin(...)
    
    new Vue({
      render:h=>h(app)
    }).$mount('#app')
    
    // vue3写法
    import { createApp } from 'vue'
    import App from './App.vue'
    const app = createApp(APP) // 创建一个app实例
    app.config.xx=xx  // 在实例上修改配置,不会发生冲突
    app.use(...)
    app.mixin(...)
    app.mount('#app')
    
    
    

    7.更多资料

    1. vue3源码
    2. vue3官网

    起源地下载网 » Vue3对比Vue2

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元