解析vue3的ref,reactive的使用和原理
目录
- 1.前言
- 2.比较
- 3.ref源码解析
- 4.reactive源码解析
- createReactiveObject
- handles的组成
- get陷阱
- set陷阱
- 5.总结
1.前言
vue3新增了ref,reactive两个api用于响应式数据,Ref 系列毫无疑问是使用频率最高的 api 之一,响应式意味着数据变动,页面局部自动更新。数据类型有基本数据类型(string,number,boolean,undfined,null,symbol),引用数据类型(object,array,set,map等)。如何精准检测跟踪js中所有的数据类型变动,并且能够达到vnode的对比后真实dom的渲染?vue中是如何做到的呢?简单实例如下:
import { reactive, ref } from "vue"; import type { Ref } from "vue"; // 定义响应式数据 const count: Ref<number> = ref(0); function countClick() { count.value++; // 更新数据 }
// 定义引用类型数据标注 interface TypeForm { name: string; num: number; list?: Array<[]>; } const formInline: TypeForm = reactive({ name: "", num: 0, }); formInline.name = 'KinHKin' formInline.num = 100 formInline.list = [1,2,3,4]
效果图:
在线地址:
KinHKin
https://rondsjinhuajin.github.io/DemoVue/#/
但是,这只是简单的使用,配合了ts的类型标注,但是背后的原理是什么呢?
相关推荐
-
Vue3 Reactive响应式原理逻辑详解
目录 前言 一.怎么实现变量变化 二.怎么实现变量变化 三.将多个dep存储在Map中 四.将多个object的depsMap继续存储起来 五.核心 六.源码解析(TypeScript) 前言 本篇文章主要讲解vue响应式原理的逻辑,也就是vue怎么从最开始一步步推导出响应式的结构框架. 先从头构建一个简单函数推导出Vue3的Reactive原理,最后再进行源码的验证. 一.怎么实现变量变化 怎么实现变量变化,相关依赖的结果也跟着变化 当原本price=5变为price=20后total应该变为
-
原理深度解析Vue的响应式更新比React快
前言 我们都知道 Vue 对于响应式属性的更新,只会精确更新依赖收集的当前组件,而不会递归的去更新子组件,这也是它性能强大的原因之一. 例子 举例来说 这样的一个组件: <template> <div> {{ msg }} <ChildComponent /> </div> </template> 我们在触发 this.msg = 'Hello, Changed~'的时候,会触发组件的更新,视图的重新渲染. 但是 <ChildCompone
-
Vue3中的ref和reactive响应式原理解析
目录 1 ref 2 isref判断是不是一个ref对象 3 shallowref创建一个跟踪自身.value变化的 ref,但不会使其值也变成响应式的 4 triggerRef 5 customRef 6 reactive用来绑定复杂的数据类型 7 readonly 8 shallowReactive 9toRef 10toRefs 11toRaw Vue3系列4--ref和reactive响应式 本节主要介绍了响应式变量和对象,以及变量和对象在响应式和非响应式之间的转换. 1 ref 接受一
-
vue3 中ref和reactive的区别讲解
1. ref和reactive区别: 如果在template里使用的是ref类型的数据, 那么Vue会自动帮我们添加.value 如果在template里使用的是reactive类型的数据, 那么Vue不会自动帮我们添加.value 2. Vue是如何决定是否需要自动添加.value的 Vue在解析数据之前, 会自动判断这个数据是否是ref类型的, 如果是就自动添加.value, 如果不是就不自动添加.value 3. Vue是如何判断当前的数据是否是ref类型的
-
Vue3响应式方案及ref reactive的区别详解
目录 一.前言 二.新的方案 1. 缘由 2. Proxy 和 Reflect 1) Proxy 2) Reflect 3. reactive 1) createReactiveObject() 函数 2) mutableHandlers() 函数 -> 对象类型的 handlers 3) mutableInstrumentations() 函数 -> Map Set等类型的 handlers 4. ref 1) createRef() 2) toReactive() 3)proxyRefs(
-
Vue3中ref与reactive的详解与扩展
一.ref和reactive 死死记住:ref本质也是reactive,ref(obj)等价于reactive({value: obj}) vue3中实现响应式数据的方法是就是使用ref和reactive,所谓响应式就是界面和数据同步,能实现实时更新 vue2中响应式是通过defineProperty实现的,vue3中是通过ES6的Proxy来实现的 1.reactive reactive的参数必须是一个对象,包括json数据和数组都可以,否则不具有响应式 如果给reactive传递了其他对象(
-
setup+ref+reactive实现vue3响应式功能
setup 是用来写组合式 api ,内部的数据和方法需要通过 return 之后,模板才能使用.在之前 vue2 中,data 返回的数据,可以直接进行双向绑定使用,如果我们把 setup 中数据类型直接双向绑定,发现变量并不能实时响应.接下来就看看setup如何实现data的响应式功能? 一.ref setup 内的自定义属性不具备响应式能力,所以引入了 ref ,ref 底层通过代理,把属性包装值包装成一个 proxy ,proxy 内部是一个对象,使得基础类型的数据具备响应式能力,使用之
-
vue3的ref,computed,reactive和toRefs你都了解吗
目录 1.ref 2.computed 3.reactive 4.toRefs 总结 在vue2中,data函数里返回的值直接为响应式的,但在vue3中我们需要使用一些函数才能达到这个效果. setup函数中拿不到vue的this 1.ref 本质为一个函数,输入参数为一个值(原始类型),返回响应式的对象 2.computed 本质为一个函数,输入参数是一个函数,可以将我们需要的值作为输入函数的返回值 例子:实现点击按钮,屏幕上的数加1 <template> <div id='app'&
-
详解Vue3中ref和reactive函数的使用
目录 前言 ref 函数介绍 ref 函数使用 ref 函数处理基本数据类型 ref 函数处理复杂数据类型 ref 函数获取单个DOM元素 其他相关方法 reactive 函数介绍 reactive 函数使用 ref 函数处理对象 ref 函数处理数组 前言 上一篇博文介绍 setup 函数的时候,最后出现一个问题,就是在 setup 函数中,编写一个事件,直接去修改定义的变量,发现页面上没有更新成功,并且控制台报错,那这篇博客就是讲解遇到的这个问题应该如何处理. ref 函数介绍 ref 作用
-
浅谈vue3中ref、toRef、toRefs 和 reactive的区别
目录 一.ref——定义任意类型响应式数据 二.reactive——定义响应式对象 三.toRef——将一个 reactive 转化为一个 ref 四.toRefs——将多个 reactive 自动解构为多个 ref 一.ref——定义任意类型响应式数据 ref 能定义“任何类型”的响应式数据(ref 在 vue3 中指响应式数据). 参数可以传入任意数据类型. 使用 ref 定义的属性必须通过 .value 的形式才能修改其值.属性的值一旦被修改就会触发模板的重新渲染以显示最新的值. 对于在
-
Vue3中ref和reactive的基本使用及区别详析
目录 前言 ref—计数器案例 reactive—计数器案例 区别 类似使用ref 类似使用 reactive 附:ref和reative的使用心得 总结 前言 今天给大家讲一下在vue3中ref和reactive的使用方法,以及他们的使用区别在哪里,下面通过一个简单的计数器的例子来给大家进行说明 ref—计数器案例 ref 主要用于基本类型的响应,看如下代码: import { ref } from 'vue' // 导入ref interface DataProps { count: num
-
深度解析 Vue3 的响应式机制
目录 什么是响应式 响应式原理 定制响应式数据 Vueuse 工具包 什么是响应式 响应式一直都是 Vue 的特色功能之一:与之相比,JavaScript 里面的变量,是没有响应式这个概念的:你在学习 JavaScript 的时候首先被灌输的概念,就是代码是自上而下执行的: 我们看下面的代码,代码在执行后,打印输出的两次 double 的结果也都是 2:即使 我们修改了代码中 count 的值后,double 的值也不会有任何改变 let count = 1 let double = count
-
Vue API中setup ref reactive函数使用教程
目录 1.setup 2.ref函数 3.reactive函数 4.Vue3.0中的响应式原理 5.reactive对比ref 1.setup 组件中所用到的:数据.方法等等,均要配置在setup中 setup函数的两种返回值: 若返回一个对象,则对象中的属性.方法, 在模板中均可以直接使用.(重点注意) 若返回一个渲染函数:则可以自定义渲染内容. 注意: vue2可以读取vue3里面的数据 如果 vue2和vue3冲突,会用vue3的,所以 尽量不要与Vue2.x配置混用 Vue2.x配置(d
随机推荐
- vue router路由参数刷新消失问题的解决方法
- JNDI,JTA和JMS简介
- 解析Neatbeans(常见错误) build-impl.xml:305: Compile failed
- php截取指定2个字符之间字符串的方法
- 利用Mongoose让JSON数据直接插入或更新到MongoDB
- php实现无限级分类(递归方法)
- jquery multiSelect 多选下拉框
- $.format,jquery.format 使用说明
- js之完全兼容ie与firefox的拖动层代码[测试好用]
- 使用JavaScript根据图片获取条形码的方法
- JavaWeb项目中springmvc和tomcat对静态文件的处理
- C#与Java的MD5简单验证(实例代码)
- 基于mysql的论坛(2)
- 基于react后端渲染模板引擎noox发布使用
- spring boot 添加admin监控的方法
- .NET Core实现分表分库、读写分离的通用 Repository功能
- 解决Python找不到ssl模块问题 No module named _ssl的方法
- vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
- 三步实现ionic3点击退出app程序
- 对比MySQL中int、char以及varchar的性能