发布信息

源码视角 Vue3为什么介绍经常使用ref而不是reactive (源码演示)

     2024-10-22 21:55:33     943

本文目录导航:

源码视角,Vue3为什么介绍经常使用ref而不是reactive

ref和reactive是Vue3中成功照应式数据的外围API。

ref用于封装基本数据类型,而reactive用于处置对象和数组。

虽然reactive仿佛更适宜处置对象,但Vue3官网文档更介绍经常使用ref。

官网文档指出,ref比reactive更实用。

上方咱们从源码的角度具体探讨这两个API,以及Vue3为什么介绍经常使用ref而不是reactive。

ref的外部上班原理是,它是一个函数,接受一个外部值并前往一个照应式且可变的援用对象。

这个援用对象有一个属性,指向外部值。

在上述代码中,ref函数经过new RefImpl(value)创立了一个新的RefImpl实例。

这个实例蕴含getter和setter,区分用于追踪依赖和触发降级。

经常使用ref可以申明任何数据类型的照应式形态,包括对象和数组。

ref的外围是前往照应式且可变的援用对象,而reactive的外围是前往照应式代理,这是两者实质上的外围区别,也就造成了ref优于reactive。

reactive的外部上班原理是,它是一个函数,接受一个对象并前往该对象的照应式代理,也就是Proxy。

reactive的源码相对繁难,经过new Proxy(target, baseHandlers)创立了一个代理。

这个代理会阻拦对指标对象的操作,从而成功照应式。

ref和reactive在申明数据的照应式形态上,底层原理不同。

ref驳回RefImpl对象实例,reactive驳回Proxy代理对象。

当你经常使用new RefImpl(value)创立一个RefImpl实例时,这个实例大抵上会蕴含以下几局部:Dep类担任治理一个依赖列表,并提供依赖搜集和通知降级的配置。

RefImpl类蕴含一个外部值_value和一个Dep实例。

当value被访问时,经过get方法启动依赖搜集;当value被赋予新值时,经过set方法触发降级。

虽然两者在外部成功上有所不同,但它们都能满足咱们关于申明照应式变量的要求,然而reactive存在必定的局限性。

reactive的局限性包括仅对援用数据类型有效,经常使用不当会失去照应。

reactive重要实用于对象,包括数组和一些汇合类型(如Map和Set)。

关于基础数据类型(如string、number和boolean),reactive是有效的。

这象征着假设你尝试经常使用reactive来处置这些基础数据类型,将会获取一个非照应式的对象。

ref()为照应式编程提供了一种一致的处置打算,实用于一切类型的数据,包括基本数据类型和复杂对象。

以下是介绍经常使用ref的几个关键要素:一致性、深层照应性和灵敏性。

ref的外围长处之一是它的一致性。

它提供了一种繁难、分歧的模式来处置一切类型的数据,无论是数字、字符串、对象还是数组。

这种一致性极大地简化了开发者的代码,缩小了在不同数据类型之间切换时的复杂性。

ref允许深层照应性,这象征着它可以追踪和降级嵌套对象和数组中的变动。

这种个性使得ref十分适宜处置复杂的数据结构,如对象和数组。 源码演示

ref提供了高度的灵敏性,尤其在处置个别赋值和解构赋值方面。

这种灵敏性使得ref在开发中的经常使用愈加繁难,特意是在启动复杂的数据操作时。

ref在Vue3中提供了一种更一致、灵敏的照应式处置打算,还能防止了reactive的某些局限性。

宿愿这篇文章对你有所协助,有所自创。

[vue3]ref函数和reactive函数的照应式原理

ref函数

作用:定义一个照应式的数据

语法:constxxx=ref(initValue)

创立一个蕴含照应式数据的援用对象(reference对象,简称ref对象)。

JS中操作数据

模板中读取数据:不须要,间接:<div>{{xxx}}</div>

备注:

接纳的数据可以是:基本类型、也可以是对象类型。

基本类型的数据:照应式依然是靠()的get与set成功的。

对象类型的数据:外部“求助”了Vue3.0中的一个新函数——reactive函数。

reactive函数

作用:定义一个对象类型的照应式数据(基本类型不要用它,要用ref函数)

语法:const代理对象=reactive(源对象)接纳一个对象(或数组),前往一个代理对象(Proxy的实例对象,简称proxy对象)

reactive定义的照应式数据是“深档次的”。

外部基于ES6的Proxy成功,经过代理对象操作源对象外部数据启动操作。

Vue3.0中的照应式原理[回忆]vue2.x的照应式

成功原理:

对象类型:经过()对属性的读取、修正启动阻拦(数据劫持)。

数组类型:经过重写降级数组的一系列方法来成功阻拦。

(对数组的变卦方法启动了包裹)。

(data,count,{get(){},set(){}})

vue2.x存在疑问:

新增属性、删除属性,界面不会降级。

间接经过下标修负数组,界面不会智能降级。

Vue3.0的照应式

成功原理:

Proxy::{//阻拦读取属性值get(target,prop){(target,prop)},//阻拦设置属性值或增加新属性set(target,prop,value){(target,prop,value)},//阻拦删除属性deleteProperty(target,prop){(target,prop)}})

经过Proxy(代理):?阻拦对象中恣意属性的变动,包括:属性值的读写、属性的增加、属性的删除等。

经过Reflect(反射):?对源对象的属性启动操作。

MDN文档中形容的Proxy与Reflect:

##reactive对比ref-从定义数据角度对比:-ref用来定义:<strongstyle=color:#DD5145>基本类型数据</strong>。-reactive用来定义:<strongstyle=color:#DD5145>对象(或数组)类型数据</strong>。-备注:ref也可以用来定义<strongstyle=color:#DD5145>对象(或数组)类型数据</strong>,它外部会智能经过```reactive```转为<strongstyle=color:#DD5145>代理对象</strong>。-从原理角度对比:-ref经过``()``的```get```与```set```来成功照应式(数据劫持)。-reactive经过经常使用<strongstyle=color:#DD5145>Proxy</strong>来成功照应式(数据劫持),并经过<strongstyle=color:#DD5145>Reflect</strong>操作<strongstyle=color:orange>源对象</strong>外部的数据。-从经常使用角度对比:-ref定义的数据:操作数据<strongstyle=color:#DD5145>须要</strong>``````,读取数据时模板中间接读取<strongstyle=color:#DD5145>不须要</strong>``````。-reactive定义的数据:操作数据与读取数据:<strongstyle=color:#DD5145>均不须要</strong>``````。原文:

reactive是什么意思在医学界

reactive[英][riˈæktɪv][美][riˈæktɪv]adj.反响的; 电抗的; 活性的; 例句 reactive aggression is a maladaptive response that may cause behavioral difficultiesin social, academic, and home settings. 这种反响性的攻打性行为是一种顺应不良反响,或者会造成社会、学校和家庭环境中的行为艰巨。

相关内容 查看全部