当前位置: 首页 > news >正文

vue经历从2.0到3.0更新

​编辑vue专栏收录该内容

9 篇文章2 订阅

订阅专栏

vue经历从2.0到3.0更新之后,简⽽⾔之就是变得更轻,更快,使⽤起来更加⽅便,每⼀次的版本迭代都是对上⼀个版本的升级优化,不管 是对于我们开发者还是对于⽤户体验都是不断地在越来越⽅便,接下来我会着重于开发者来说⼀下两个不同版本的区别,

详解

1.vue2.0和3.0的初始化就存在着⼀定区别,⽐如vue3.0可以在安装脚⼿架同时提前安装好⼀些项⽬开发必备的插件,并且3.0提供了可视 化创建脚⼿架,可以更加⽅便的对插件和依赖进⾏管理和配置,同时两个版本的⽬录结构也是有些许差别的。

2.在开发过程中两个版本的使⽤⽅法虽然在表⾯上没有太⼤的⼀个区别,但是在他的底层⽅⾯去看的话区别还是很⼤的,其中就包括渲染⽅ 式,数据监听,双向绑定,⽣命周期,vue3更精准变更通知,

这⾥着重说⼀下关于双向绑定的更新,

vue2 的双向数据绑定是利⽤ES5 的⼀个 API ,Object.definePropert()对数据进⾏劫持 结合 发布订阅模式的⽅式来实现的。

vue3 中使⽤了 es6 的 ProxyAPI 对数据代理,通过 reactive() 函数给每⼀个对象都包⼀层 Proxy,通过 Proxy 监听属性的变化,从⽽ 实现对数据的监控。

 
  1. 这⾥是引相⽐于vue2版本,使⽤proxy的优势如下

  2. 1.defineProperty只能监听某个属性,不能对全对象监听

  3. 可以省去for in、闭包等内容来提升效率(直接绑定整个对象即可)

  4. 2.可以监听数组,不⽤再去单独的对数组做特异性操作,通过Proxy可以直接拦截所有对象类型数据的操作,完美⽀持对数组的监听。

  5. 复制代码

3.另外vue3还新增了⼀些内置组件和⽅法,⽐如vue3可以默认进⾏懒观察,使⽤Function-based API,setup函数,对与插件或对象的⼀ 个按需引⼊,Computed Value ,新加⼊了 TypeScript 以及 PWA 的⽀持等等… 这⾥着重说⼀下vue3的⼀个按需引⼊

Vue2.x中new出的实例对象,所有的东西都在这个vue对象上,这样其实⽆论你⽤到还是没⽤到,都会跑⼀遍,这样不仅提⾼了性能消耗,
也⽆疑增加了⽤户加载时间。

⽽vue3.0中可以⽤ES module imports按需引⼊,如:keep-alive内置组件、v-model指令,等等,不仅我们开发起来更加的便捷,减少 了内存消耗,也同时减少了⽤户加载时间,优化⽤户体验。

创建vue2和vue3项目的文件发生的变化

1.main.js中


核心代码
createApp(App).mount('#app') = createApp(根组件).mount('public/index.html中的div容器')

1.vue2.0中是直接创建了一个vue实例
2.vue3.0中按需导出了一个createApp (ceateApp做了什么)
3.vue3中的app单文件不再强制要求必须有根元素 也就是说 在vue2.0中必须要有一个根元素,在vue3中没这个要求

 
  1. <template>

  2. <img alt="Vue logo" src="./assets/logo.png">

  3. <HelloWorld msg="Welcome to Your Vue.js App"/>

  4. </template>

  5. 复制代码

数据双向绑定原理

Vue2使⽤的是Object.defineProperty()进⾏数据劫持,结合发布订阅的⽅式实现。

Vue3使⽤的是Proxy代理,使⽤ref或者reactive将数据转化为响应式数据

数据和方法的定义

Vue2使⽤的是选项类型API(Options API),Vue3使⽤的是合成型API(Composition API)

Vue2:

 
  1. data() { return {}; }, methods:{ }

  2. 复制代码

Vue3:

数据和⽅法都定义在setup中,并统⼀进⾏return{}

生命周期

获取props

vue2:console.log(‘props’,this.xxx)
vue3:setup(props,context){ console.log(‘props’,props) }

给父组件传值emit

vue2:this.$emit()
vue3:setup(props,context){context.emit()}

相关文章:

  • 安装mysqlclient失败解决办法
  • 华为OD机试真题 Java 实现【单词接龙】
  • Spring boot 日志直接推送到elasticsearch上
  • 网络部署运维实验(pat 端口映射含命令)
  • 软件测试期末复习(二)试题及答案
  • 智能家居创意DIY之智能灯泡
  • Linux——磁盘在网络中共享
  • 【Git】一文带你入门Git分布式版本控制系统(创建合并分支、解决冲突)
  • Spring Boot骚操作-多数据源Service层封装
  • 信贷--------
  • Qt编写雷达模拟仿真工具1-背景布局
  • Java中常见的文件操作
  • 强强联合,怿星科技艾拉比携手斩获“铃轩奖”
  • Linux下的目录结构Linux基本命令(程序员必学)
  • Linux系统之源码编译部署Redis数据库
  • Docker下部署自己的LNMP工作环境
  • js如何打印object对象
  • Spring-boot 启动时碰到的错误
  • 闭包--闭包作用之保存(一)
  • 产品三维模型在线预览
  • 从重复到重用
  • 翻译:Hystrix - How To Use
  • 服务器从安装到部署全过程(二)
  • 基于Android乐音识别(2)
  • 理清楚Vue的结构
  • 你真的知道 == 和 equals 的区别吗?
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 问题之ssh中Host key verification failed的解决
  • 新版博客前端前瞻
  • 源码安装memcached和php memcache扩展
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • #NOIP 2014# day.2 T2 寻找道路
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #Z2294. 打印树的直径
  • $jQuery 重写Alert样式方法
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)MFC+openGL单文档框架glFrame
  • (TOJ2804)Even? Odd?
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (转)Linux整合apache和tomcat构建Web服务器
  • .gitignore文件---让git自动忽略指定文件
  • .net core使用ef 6
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET企业级应用架构设计系列之应用服务器
  • /var/spool/postfix/maildrop 下有大量文件
  • :not(:first-child)和:not(:last-child)的用法
  • [AIGC] 如何建立和优化你的工作流?
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [HackMyVM]靶场 Wild
  • [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云