vue3双向绑定的原理

利用 proxy+reflect

proxy:用于修改某些操作的默认行为,等同于在语言层面做出修改。相当于在目标前假设一个拦截层,外层对该对象的访问都必须经过这层拦截。

reflect:es6为操作对象而提供的新的api。

目的有:

1.将Object对象的一些明显属于语言内部的方法,放到Reflect对象上。如Object.defineProperty

2.修改某些Object方法的返回结果,让其变得更合理。比如利用Object.defineProperty给基本数据类型添加一个属性,就无法对属性进行定义,这时会抛出一个错误。而Reflect.defineProperty(obj,name,desc)会返回false。

3.将让Object操作都变成函数行为。

Reflect.has(obj,name)

Reflect.deleteProperty(obj,name)

4.Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="text" name="" id="" value="" />
		<h1></h1>
		<script>
			var h1 = document.querySelector('h1')
			var ipt = document.querySelector('input')
			let obj = {}
			var proxy = new Proxy(obj,{
				get:function(target,key,receiver) {
					return Reflect.get(target,key,receiver)
				},
				set:function(target,key,value,receiver) {
					//监听proxy是否有新的变化
					if(key == 'text') {
						h1.innerText = value
					}
					//将变化反射会原有对象
					return Reflect.set(target,key,value,receiver)
				}
			})
			ipt.addEventListener('input',function(){
				proxy.text = ipt.value
			})
		</script>
	</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 3 中的双向绑定原理Vue 2 有所不同。在 Vue 2 中,双向绑定是通过使用 v-model 指令实现的,它实际上是语法糖,相当于同时使用了 v-bind 和 v-on 指令。 而在 Vue 3 中,双向绑定的实现方式有所改变。Vue 3 引入了一个新的响应式系统,其中的核心概念是 Reactive(响应式)和 Proxy(代理)。 Vue 3 使用 Proxy 对象来实现双向绑定。当我们在模板中使用 v-model 指令时,Vue 会通过 Proxy 对象来监听数据的变化。当数据发生变化时,Proxy 对象会自动更新模板中的对应内容,并且当用户在输入框中输入内容时,Proxy 对象也会同步更新数据。 具体的实现逻辑是这样的:当我们在模板中使用 v-model 指令时,Vue 会将指令绑定的数据属性转换为一个 Proxy 对象。这个 Proxy 对象会拦截对数据属性的访问和修改操作,并在数据发生变化时触发相应的更新。 通过使用 Proxy 对象,Vue 3 实现了更高效的响应式系统,相比于 Vue 2 的双向绑定实现方式,能够减少不必要的更新操作,提高性能和效率。 需要注意的是,在 Vue 3 中,双向绑定的实现方式发生了变化,但是 v-model 指令仍然可以用于实现单向绑定,只需要省略掉修饰符即可。例如,v-model="message" 相当于 v-bind:value="message" 和 v-on:input="message = $event.target.value"。这样可以保持与 Vue 2 中的使用习惯的兼容性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hcoke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值