上个文章我们说了vue2的原理,看这里。
现在简单说一下vue3的原理。
vue3 建议大家还是多多看看官网,毕竟语法都变了,虽然兼容vue2,但是最好按照官网说的取用vue3 .不然会有一系列的报错。很是头疼。
例如 vue2中用 data(){return { }}等, vue3 就舍弃了这个,直接用的是setup(){…, return{导出定义的属性/对象、数组等、函数等}}

vue3的响应式:实现原理

通过Proxy(代理):拦截对象中任意属性的变化,包括:属性值读写。属性的添加,属性的删除等。
通过Reflect(反射):对被代理对象的属性进行操作。

在vue3 中要注意它新增了一个ref函数 此ref非vue2中的ref 。
这里的

ref

接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象仅有一个 .value property,指向该内部值。(可以大白话的理解为基础的数据使用)

const count = ref(0)
console.log(count.value) // 0
也就是要跟一个 .value ,后边发现很扯。

然后有一个

reactive

:返回对象的响应式副本(大白话的理解为复杂数据数据)

const obj = reactive({ count: 0 })

响应式转换是“深层”的——它影响所有嵌套 property。在基于 ES2015 Proxy 的实现中,返回的 proxy 是不等于原始对象的。建议只使用响应式 proxy,避免依赖原始对象。
当将 ref 分配给 reactive property 时,ref 将被自动解包。
我们写的时候也就避免了 .value 的形式。

<template><h1>vue3<p>{{person.name}}</p><p>{{person.age}}</p><p v-show= "person.sex"> 性别:{{person.sex}}</p><p>{{person.job.type}}</p><p>{{person.job.salary}}</p><p>{{person.job.a.b.c}}</p><button @click="changeInfo">更新</button><button  @click="setInfo">添加属性</button><button  @click="delInfo">删除属性</button></h1>
</template>
<script>
import { reactive  } from  'vue'
export default {name: 'App',setup(){// 基础数据let person = reactive({name : '张',age : '19',job: {type:" 前端",salary: "30k",a:{b:{c:555}}}})function changeInfo(){person.name= 'lisi'person.age= '34'person.job.type = '经理' person.job.salary = '40k'// job.value.type = '经理' // job.value.salary = '40k'person.job.a.b.c = 666console.log(person);}function setInfo(){person.sex='男'}function delInfo(){delete person.name }return {person,changeInfo, setInfo, delInfo}}
}
</script>

看一下这里

对比 reactive 和 ref

1 从定义数据角度对比:
ref 用来定义:基本数据类型;
reactive用来定义:对象(数组)类型数据;
注意: ref 也可以用来定义对象(或数组)类型数据,他内部会自动通过reactive转我代理对象。
2 从原理角度对比:
ref 通过Object.defineProperty()的get与set来实现响应式(数据劫持)。
reactive 通过 使用Proxy来实现响应式(数据劫持),并开通Reflect操作 源对象 内部的数据。
3 从使用角度对比:
ref 定义的数据:操作数据需要 .value ,读取数据时模板中直接读取不需要 .value。
reactive 定义的数据:操作数据与读取数据 均不需要 .value.

后期在继续优化。有不同见解欢迎交流。

vu3响应式原理 代码分析相关推荐

  1. vu2响应式原理 代码分析

    随着vue3的发布和运行,vue2 的知识也不能忘却.温习一下vue2的原理用代码来解说. 我们熟悉vue的都知道,在vue2 中是不能直接监测到数据的新增和删除的.所以也有一定的方法,我们要知道这些 ...

  2. Vue响应式原理(含详细代码)

    Vue响应式原理介绍 监听Vue实例中的data选项,我们以下用一个普通的js对象模拟data,用Object.defineProperty进行定义属性值的getter和setter方法.当data选 ...

  3. 你不知道的Vue响应式原理

    文章首发于github Blog. 本文根据Vue源码v2.x进行分析.这里只梳理最源码中最主要的部分,略过非核心的一些部分.响应式更新主要涉及到Watcher,Dep,Observer这几个主要类. ...

  4. 【Vue.js源码解析 一】-- 响应式原理

    前言 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:建议通过左侧导航栏进行阅读 课程目标 Vue.js 的静态成员和实例成员初始化过程 首次渲染的过程 数据响应式原理 – 最核心的特性之一 准备工作 ...

  5. Vue数据绑定和响应式原理

    Vue数据绑定和响应式原理 当实例化一个Vue构造函数,会执行 Vue 的 init 方法,在 init 方法中主要执行三部分内容,一是初始化环境变量,而是处理 Vue 组件数据,三是解析挂载组件.以 ...

  6. matlabeig函数根据什么原理_vue3.0 源码解析二 :响应式原理(下)

    一 回顾上文 上节我们讲了数据绑定proxy原理,vue3.0用到的基本的拦截器,以及reactive入口等等.调用reactive建立响应式,首先通过判断数据类型来确定使用的hander,然后创建p ...

  7. Vue2.0 —— 由设计模式切入,实现响应式原理

    Vue2.0 -- 由设计模式切入,实现响应式原理 <工欲善其事,必先利其器> 既然点进来了,麻烦你看下去,希望你有不一样的收获. 大家好,我是vk,好久不见,今天我们一起来盘一盘关于 V ...

  8. Vue响应式原理 vue源码(十一)

    前言 看过很多讲响应式的文章,大多都是告诉你们,有Observer,Dep,Wathcer类,Object.definePorperty,先会触发get中的dep.depend收集依赖,然后数据改变时 ...

  9. 一篇文章带你吃透VUE响应式原理

    本篇响应式原理介绍比较长,全文大概1w+字.虽然内容繁杂,但阅读过后,绝对会让你对vue的响应式有更加深刻的理解. 分块阅读,效果更佳.(建议读者有一定vue使用经验和基础再食用) 首先上图,下面这张 ...

最新文章

  1. 如何入门论文阅读综述小解答
  2. 3D视觉检测的未来:光度立体技术
  3. navicat的使用
  4. iOS 版 Skype支持群组语音聊天
  5. 通过PXE服务器批量安装系统
  6. AtCoder Regular Contest 092 Two Sequences AtCoder - 3943 (二进制+二分)
  7. 天翼云从业认证(3.6)了解天翼云大数据SaaS服务
  8. 系统思考与《第五项修炼》
  9. KafKa基本入门教程
  10. PowerShell说“此系统上的脚本执行被禁用。”
  11. [纪事]再见,CodeArtist
  12. spring cloud 学习(5) - config server
  13. 入门必看,51单片机学习三步走
  14. 【算法笔记】莫队算法(基础莫队,带修莫队,回滚莫队,树上莫队,二次离线莫队)
  15. 关于感染型病毒ramnit和runner的查杀记事
  16. Windows下错误码全解析
  17. 独立站卖家如何利用Google广告引流
  18. ubuntu下安装Realtek usb无线网卡驱动(8821cu)
  19. matplotlib之pyplot模块之标题(title()和suptitle())
  20. java的抽象方法和抽象类

热门文章

  1. 【DOS】通过for命令截取字符串
  2. 嵌入式实践教程--ASOC之Codec
  3. python字符串对象所有基本方法简要
  4. 3d打印驱动开启uart有什么用TMC2208如何在Ramps1.4开启uart
  5. Invalid bound statement (not found): com.kuang.dao.bookMapper.queryAllbook
  6. Photoshop CC 2019安装过程中遇到计算机中丢失:D3DCOMPILER-47.dll的情况
  7. 国庆特别回顾 | 一分钟读懂AMM是什么?
  8. 链路追踪(Tracing)的前世今生(上)
  9. Oracle生成日历表
  10. 算法2.4.24:查找链表二叉树节点