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中的问题

相关推荐

  1. Vue3响应原理

    2023-12-05 22:04:06       64 阅读
  2. Vue 3响应原理

    2023-12-05 22:04:06       64 阅读
  3. vue2和vue 3 响应原理

    2023-12-05 22:04:06       31 阅读
  4. vue响应原理

    2023-12-05 22:04:06       58 阅读
  5. vue响应原理:依赖追踪

    2023-12-05 22:04:06       67 阅读
  6. VUE3-响应

    2023-12-05 22:04:06       54 阅读
  7. Vue3 响应数据

    2023-12-05 22:04:06       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 22:04:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 22:04:06       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 22:04:06       82 阅读
  4. Python语言-面向对象

    2023-12-05 22:04:06       91 阅读

热门阅读

  1. Web 安全之 X-XSS-Protection 详解

    2023-12-05 22:04:06       43 阅读
  2. C++初阶-string的使用

    2023-12-05 22:04:06       55 阅读
  3. Python-错误与异常处理

    2023-12-05 22:04:06       59 阅读
  4. C# 方法的递归调用

    2023-12-05 22:04:06       62 阅读
  5. CSS逻辑组合伪类

    2023-12-05 22:04:06       58 阅读
  6. K8S集群中PLEG问题排查

    2023-12-05 22:04:06       55 阅读
  7. k8S 发布spring boot的jar包

    2023-12-05 22:04:06       59 阅读
  8. 第五章 接口函数

    2023-12-05 22:04:06       54 阅读
  9. 我的第一篇博客

    2023-12-05 22:04:06       62 阅读