Vue3响应式的原理

Vue3中实现响应式原理

Vue3中使用ES6中的Proxy来实现响应式,并通过Reflect操作源对象内部的数据

模拟Vue3响应式

1. 准备环境

创建一个index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <link rel="icon" href="/favicon.ico" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vite App</title>
</head>
<body>
  <div id="app"></div>
  <script type="module" src="/src/main.js"></script>
</body>
</html>
2 js创建person对象

<script>
    let person = {
        name:"张三",
        age: 18
    }
</script>
3 proxy对象使用

new Proxy(object,handler)
object 要代理的对象
handler 处理动作

const p = new Proxy(person,{
        get(target,propName){
            console.log("获取"+propName+"属性值")
            return target[propName]
        },
        set(target,propName,value){
            console.log(propName+"属性值改变了")
            target[propName] = value;
        },
        deleteProperty(target, propName) {
            console.log(propName+"属性值删除了")
            return delete target[propName]
        }
    });
4.使用Reflect对象修改值
const p = new Proxy(person,{
        get(target,propName){
            console.log("获取"+propName+"属性值")
            //return target[propName]
            return Reflect.get(target,propName)
        },
        set(target,propName,value){
            console.log(propName+"属性值改变了")
            //target[propName] = value;
            Reflect.set(target,propName,value)
        },
        deleteProperty(target, propName) {
            console.log(propName+"属性值删除了")
            //return delete target[propName]
            return Reflect.deleteProperty(target,propName)
        }
    });

总结

  1. Vue2中使用Object对象的功能实现响应式,不能对对象直接增加属性和对数组指定角标修改,需要使用变通方法修改
  2. Vue3中使用Proxy+Reflect实现响应式,不存在vue2中的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值