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

vue2和vue3的区别详解

vue2 VS vue3

对比vue2vue3
配置脚手架cmd命令行可视化方式创建脚⼿架
组件通信props、$emit、provide、$arrts、EventBus等props、$emit、provide、inject、arrts等
数据监听watch,computedwatch,watchEffect,computed
双向绑定Object.definePropertyProxyAPI
⽣命周期四个阶段beforeCreatecreated—>setup
api选项式Options API组合式Composition API

双向数据绑定原理

vue2 的双向数据绑定是通过ES5的⼀个API,Object.defineProperty()对数据进⾏劫持,结合发布订阅模式的⽅式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变;

其核心是 Object.defineProperty()方法,给Vue中的数据绑定get和set方法,当获取数据的时候,调用get方法,修改data中的数据的时候调用set方法,通过watcher监听器去更新视图,完成数据的双向绑定。

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

相对于Object.definePropery()有以几个优点:1.Proxy直接代理整个对象而非对象属性,这样只需要做一层代理就可以监听同级结构下的所有属性变化, 包括新增属性和删除属性。 2.Proxy可以监听数组的变化。

生命周期对比

vue2生命周期vue3生命周期描述
beforeCreate()已去掉setup代替

创建阶段

Created()已去掉setup代替
beforeMount()onBeforeMount

挂载阶段

mounted()onMounted
beforeUpdateonBeforeUpdate更新阶段
updated onUpdated
beforeDestroyonBeforeUnmount

销毁阶段

destrovedonUnmounted

建立数据发生了变化

        vue2把数据放在data中,vue3把数据放在setup中。

是否支持碎片化

        vue2.0只允许有一个根标签,vue3.0支持碎片化,可以拥有多个根节点。

Vue2
<template>
  <div>
    <header></header>
    <main></main>
    <footer></footer>
  </div>
</template>
Vue3
<template>
  <header></header>
  <main></main>
  <footer></footer>
</template>

组件通信

  • props通信
    • vu3 父传子                  
    • vue2父传子
      1.定义数据 
      data(){
             return{
                 goodsList:[
                    {id:1,name:'方便面',price:2.5,info:'好吃不贵'},
                    {id:2,name:'火腿肠',price:2,info:'价钱合理'},
                    {id:3,name:'鹌鹑蛋',price:4.5,info:'物美价廉'},
                  ]
                 }
              },
      
      2.放到模板的子组件中
      <MyTest :item="goodsList[1]"></MyTest>
      
      3.子组件props接收
       export default {
              //接收数据
            props:['item']
          }

    • vue3子传父


http://www.kler.cn/a/393899.html

相关文章:

  • Dockerfile的使用
  • 将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
  • ios swift开发--ios远程推送通知配置
  • 《新智慧》期刊的征稿范围主要包括哪些方面?
  • 猿创征文|Inscode桌面IDE:打造高效开发新体验
  • Wireshark
  • 『VUE』25. 组件事件与v-model(详细图文注释)
  • web安全漏洞之ssrf入门
  • Spring MVC练习
  • 【python】python使用虚拟环境
  • C++初阶:类和对象(上)
  • Golang | Leetcode Golang题解之第563题二叉树的坡度
  • mysql中的EXISTS和NOT EXISTS使用详解
  • 单例模式详解:如何优雅地实现线程安全的单例
  • 业务开发问题之ConcurrentHashMap
  • docker Network(网络)
  • 如何利用AI实现弯道超车:信息时代的新机遇
  • 《MYSQL45讲》误删数据怎么办
  • 【大数据学习 | flume】flume的概述与组件的介绍
  • QtWebServer
  • 【多线程】伪共享的概念
  • 无插件H5播放器EasyPlayer.js网页web无插件播放器vue和react详细介绍
  • LeetCode 86.分隔链表
  • Unity插件-Smart Inspector 免费的,接近虚幻引擎的蓝图Tab管理
  • Linux系统编程多线程之条件变量和信号量讲解
  • 力扣--树题总结