Vue3中实现响应原理

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

模拟Vue3响应

1. 准备环境

创建一个index.html

<!DOCTYPE html>
<html lang="en">
<head&gt;
  <meta charset="UTF-8"&gt;
  <link rel="icon" href="/favicon.ico" /&gt;
  <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中的问题

原文地址:https://blog.csdn.net/weixin_42202992/article/details/134753032

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_30694.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注