vue2.0和vue3.0的区别

vue2与vue3的区别

更小
vue2采用的是面向对象编程,vue3采用函数式编程
更快
vue3修改了细腻dom算法,只针对变化的层进行diff,而vue2是对所有的dom进行diff
加强typescript支持
api一致性
提高可维护能力
开放更多底层功能
把更多的底层功能开放出来,比如render,依赖收集功能。
数据双向绑定
vue2使用的是definedOroperty,vue3使用的是proxy
vue3使用proxy的优点
使用proxy不污染源对象,会返回一个新对象,defineProperty是注入型的,会破坏源对象。
使用proxy只需要监听整个源对象的属性,不需要循环使用Object.definedProperty监听对象的属性。
使用proxy可以获取到对象属性的更多参数,使用definedProperty只能获取到监听属性的新值newValue。
创建vue实例
vue2:new Vue({})
vue3: vue.createApp({})
根节点
vue3是允许有多个根节点的,即template里面可以同时写多个节点并列,而vue2只能有一个根节点,在根节点里面再去添加其他节点。
在给组件上编写class名时,由于组件中可以有多个根节点,那么需要定义哪部分将接收这个class。可以使用$attrs组件property执行此操作。
image.png
vue3中的组合式api
setup
  • vue3中为什么新增了setup?

    可以把业务相关的代码放在同一个位置来写。将同一个逻辑关注点相关代码收集在一起会更好的阅读和维护。组合优于继承!

image.png
  • 在哪里使用?

    setup是vue3新增的生命周期函数,他存在于created和beforeCreated之间。使用组合式API更符合大型项目的开发,通过setup可以将该部分抽离成函数。所以在执行setup的时候还没有进行项目的初始化,就不能访问data或者是methods中的数据和方法,this是undefined。

    一旦props被解析,就将作为组合式api的入口。

  • 怎么使用?

    setup选项是一个接收props和context的函数。

    setup内部可以定义数据和方法,如果想在模板中使用,必须要通过return进行返回,暴露给组件的其余部分(计算属性、方法、生命周期钩子等等)以及组件的模板。

vue3中的setup之props
背景

因为props是响应式的,所以不能使用ES6解构,会消除prop的响应性,如果需要解构prop,可以在setup函数中使用toRefs。

  • 使用toRefs和toRef的区别:

    • 如果想要解构全部的可以使用toRefs(返回对象中所有属性都是响应式的,但是会耗性能)

    • 解构其中的某个属性可以用toRef(将对象的某一个属性作为引用返回)

image.png
image.png
vue3中的context

context是一个普通的javascript对象,也就是说,他不是响应式的,可以安全的对context使用es6解构。

image.png
ref
  • 带ref的响应式变量

    a. 在3.0中,可以通过一个新的ref函数使任何响应式变量在任何地方起作用。

    b. ref 接收参数并将其包裹在一个带有 value property 的对象中返回,然后可以使用该 property 访问或更改响应式变量的值。

    c. 将值封装在一个对象中,看似没有必要,但为了保持 JavaScript 中不同数据类型的行为统一,这是必须的。这是因为在 JavaScript 中,Number 或 String 等基本类型是通过值而非引用传递的。ref是为我们的值穿件了一个响应式应用。

ref与reactive的区别
  • ref()和reactive()这两种方式都是对响应式数据的声明。

  • reactive定义复杂的数据类型的数据,ref推荐定义基本数据类型。

  • ref定义的数据打印结果需要.value才能获取到结果,reactive不需要。

  • 使用ref定义基本数据类型,ref也可以定义数组和对象。但是使用reactive去定义基本数据类型的时候控制台会报出警告的信息。

image.png
  • 对于应用类型,什么时候使用ref,什么时候使用reactive?

    • 只打算修改引用类型的属性的时候使用reactive,想要修改变量重新赋值的时候一定要用ref。
    • 如果是重新赋值的话用reactive,在onMounted里面不是检测不到变化,不能在onMounted里面用reactive或者ref去赋值,但是可以直接counter.name=’lisi’去赋值
reactive与shallowReactive的区别
  • 如果数据是服务器返回的LIST数据,而且只显示、不变更,那么最好是使用shallowRef来包装数据,可以节能。如果会有变更,那么应该用ref

  • shallow的中文意义是“浅层的”,shallowReactive不代理深层property,只会指向原始对象的深层property。

  • shallowReactive的用途是:如果一个对象的深层不可能变化,那么就没必要深层响应,这时候用shallowReactive可以节省系统开销。(印证第一点)

未完,待续...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容