vue2和vue3的区别

一 、响应性不同

vue2利用ES5的一个api, Object.defineproperty()通过对数据进行劫持,结合订阅发布的模式来实现的. data 中声明的属性都被添加了访问器属性,当读取 data 中的数据时自动调用 get 方法,当修改 data 中的数据时,自动调用 set 方法, 侦测到数据的变化时,会通知订阅者 Watcher,订阅者 Watcher自动触发更新当前组件(子组件不会重新渲染),生成新的虚拟 DOM 树,Vue框架会深层遍历,并找出新旧不同虚拟DOM之间的差异, 将不同点,局部修改到真实DOM树上, 使最小化的更新视图
vue3: 使用了ES6的ProxyApi对数据进行代理, 通过reactive()函数给每一个对象都包一层Proxy, 通过对Proxy监听属性的变化, 来实现对数据的监控

vue2与vue3实现数据响应式的优缺点 :

  1. 深度监听,需要一次性递归到底,计算量比较大
  2. 描述符只有get和set,无法监听新增属性和删除属性的操作
  3. 无法原生监听数组

二、实例化

  1. Vue 2.x中new出的实例对象,所有的东西都在这个vue对象上,这样其实无论你用到还是没用到,都会跑一遍,这样不仅提高了性能消耗,也无疑增加了用户加载时间。
  2. vue3.0中可以用ES module imports按需引入,如:keep-live内置组件、v-model指令,等等,不仅我们开发起来更加的便捷,减少了内存消耗,也同时减少了用户加载时间,优化用户体验。

三、生命周期

在这里插入图片描述

四、获取props

vue2在script代码块可以直接获取props,vue3通过setup指令传递

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

五、 数据和方法的定义

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

Vue2:

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

Vue3:
数据和方法都定义在setup中,并统一进行return{ }

六、给父组件传值emit

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

七、watchEffect

Vue3中除了watch,还引入了副作用监听函数watchEifect,用过之后我发现它和React中的useEffect很像,只不过watchEffect不需要传入依赖项。 那么什么是watchEffect呢?
watchEffect它会立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。

computed和watch所依赖的数据必须是响应式的。

Vue3引入了watchEfectwatchEFfect相当于将watch的依赖源和回调函数合并,当任何你有用到的响应式依赖更新时,该回调函数便会重新执行。不同于watch的是watcheffect的回调函数会被立即执行,即({ immediate: true })

八、组件通信

在这里插入图片描述

九、路由

vue3和vue2路由常用功能只是写法上有些区别:
vue3的beforeRouteEnter作为路由守卫的示例是因为它在setup语法糖中是无法使用的;
大家都知道setup中组件实例已经创建,是能够获取到组件实例的,
而beforeRouteEnter是再进入路由前触发的,此时组件还未创建,所以是无法用在setup中的;
如果想在setup语法糖中使用则需要再写一个script如下:

vue3路由写法:

	import { defineComponent ]} from 'vue'
	import { useRoute,useRouter } from 'vue-router'
	export default defineComponent({
		beforeRouteEnter (to,from,next) {//在渲染该组件的对应路由被confirm前调用
			next()
		},
		beforeRouteLeave ((to,from,next)=>{//离开当前的组件,触发next()
			next()
		},
		beforeRouteLeave((to,from,next)=>{//离开当前的组件,触发next()
			next()
		),
		setup{
			const router = useRouter()
			const route = useRoute()
			const toPage = (=>router.push(xxx))
		}
		
			//获取params 注意是route
			route.params
			//获取query
			route.query
			return {
				toPage
			}
		}
	});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2和Vue3之间有一些重要的区别。首先,Vue3的脚手架命令式可视化创建脚手架更加方便。其次,Vue3引入了Composition API,允许开发者更灵活地组织和重用代码。相比之下,Vue2使用的是选项式API。第三,数据监听方面,Vue2使用的是watch和computed来实现数据监听,而Vue3引入了watchEffect和computed来实现更高效的数据监听。此外,双向绑定方面,Vue2使用Object.defineProperty,而Vue3使用了更先进的Proxy API。另外,Vue3还支持碎片(Fragments),即可以拥有多个根节点。总之,Vue3相比Vue2在性能、轻量化、协作等方面都有所优化,同时引入了更多的新特性和语法糖,提供了更好的开发体验和维护成本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue2和vue3的区别(由浅入深)](https://blog.csdn.net/weixin_42974827/article/details/126560362)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue2和vue3区别](https://blog.csdn.net/weixin_54722719/article/details/123069837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值