当前位置:网站首页 > Vue.js开发 > 正文

vue2和vue3区别大吗(vue2和vue3的底层原理)



1. vue2和vue3响应式原理发生了改变

vue2 的响应式原理是利⽤es5 的⼀个 API ,Object.defineProperty()对数据进⾏劫持结合发布订阅模式的⽅式来实现的。

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

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

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

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

3.可以监听数组,不⽤再去单独的对数组做特异性操作,通过Proxy可以直接拦截所有对象类型数据的操作,完美⽀持对数组的监听。 (vue3.x可以检测到数组内部数据的变化)

2. Vue3支持碎片(Fragments)

就是说在组件可以拥有多个根节点。 

vue2

 

 vue3

 

3.数据和方法的定义

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

旧的选项型API在代码里分割了不同的属性: data,computed属性,methods,等等。新的组合式API能让我们用方法(function)来分割,相比于旧的API使用属性来分组,。

函数可以说是的属性和方法入口。在中,使用的是、。在中我们把属性和方法都放在函数中。函数中有以下几个特点:

 1.setup(props,context):接收两个参数

(1) props :接收来自父组件传来的参数

(2) context :上下文,主要包含3个使用参数:attrs,emits,slots,相当于Vue2中this的 attrs,emits,slots

2.有返回值,返回值可以是两种:

 (1) 返回 对象 ,返回的对象中的属性方法,可在模板中直接使用;

 (2) 返回 渲染函数 ,可以自定义渲染的内容;

3.函数内部没有; 

 4.当内部有异步函数,需要使用到的时候,可以直接使用,不需要在前面加

4.生命周期钩子  

vue2vue3说明beforeCreatesetup()组件 创建之前createdsetup()组件创建完成beforeMountonBeforeMount组件挂载之前mountedonMounted组件挂载完成beforeUpdateonBeforeUpdate数据更新,虚拟DOM打补丁之前updatedonUpdated数据更新,虚拟DOM渲染完成beforeDestroyonBeforeUnmount组件销毁之前destroyedonUnmounted组件销毁后activatedonActivateddeactivatedonDeactivated
  • 若组件被包含,则多出下面两个钩子函数。
  1. onActivated(): 被包含在中的组件,会多出两个生命周期钩子函数。被激活时执行 。
  2. onDeactivated(): 比如从 A组件,切换到 B 组件,A 组件消失时执行。

5.父子通信 

(1)父传子

  1. 父组件提供数据
  2. 父组件将数据传递给子组件
  3. 子组件通过defineProps进行接收
  4. 子组件渲染父组件传递的数据
 

(2)子传父

  1. 在子组件中获取emit , defineEmits()
  2. 子组件中用emit发送事件
  3. 父组件要监听子组件的事件
  4. 父组件提供事件的处理函数
 

到此这篇vue2和vue3区别大吗(vue2和vue3的底层原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • pcie5.0和pcie4.0区别 x16(pcie5.0和pcie4.0区别打游戏)2025-04-29 18:54:10
  • vue 路由安装(vue3.0 路由)2025-04-29 18:54:10
  • ubuntu升级内核版本(ubuntu 18.04升级内核)2025-04-29 18:54:10
  • vue2项目换成vue3(vue项目改成h5)2025-04-29 18:54:10
  • vue 具名插槽(vue3具名插槽)2025-04-29 18:54:10
  • Redhat9.0 root用户登录(redhat进入root用户)2025-04-29 18:54:10
  • 路由守卫vue的几种方式(什么是路由守卫vue)2025-04-29 18:54:10
  • jsz是哪个明星的缩写(js是哪个明星的名字缩写)2025-04-29 18:54:10
  • ubuntu18.04镜像(Ubuntu18.04镜像漏洞下载)2025-04-29 18:54:10
  • Json字符串转实体类(json字符串怎么转换成json对象)2025-04-29 18:54:10
  • 全屏图片