当前位置: 首页 > wzjs >正文

茌平建设局网站上饶网站设计公司

茌平建设局网站,上饶网站设计公司,网页制作详细设计,简单又有创意的公司名称在 Vue 3 中,ref 和 reactive 是两种不同的响应式数据创建方式,它们的区别和实现方式如下: 一、核心区别 特性refreactive适用类型基本类型 对象类型仅对象类型(对象/数组/Map/Set)访问方式通过 .value 访问直接访问…

在 Vue 3 中,refreactive 是两种不同的响应式数据创建方式,它们的区别和实现方式如下:


一、核心区别

特性refreactive
适用类型基本类型 + 对象类型仅对象类型(对象/数组/Map/Set)
访问方式通过 .value 访问直接访问属性
解构响应性需要 toRefs 保持解构后的响应性直接解构会丢失响应性
深层响应性自动递归代理嵌套对象自动递归代理嵌套对象
模板自动解包支持(模板中无需 .value直接访问属性

二、实现方式

1. ref 的实现
  • 核心机制:通过一个对象包装值(RefImpl 类),利用 getter/setter + Proxy 实现响应式。

  • 源码关键点

class RefImpl<T> {private _value: Tprivate _rawValue: T // 原始值(避免对象被 reactive 二次代理)constructor(value: T) {this._rawValue = valuethis._value = isObject(value) ? reactive(value) : value}get value() {track(this, TrackOpTypes.GET, 'value') // 依赖收集return this._value}set value(newVal) {if (hasChanged(newVal, this._rawValue)) {this._rawValue = newValthis._value = isObject(newVal) ? reactive(newVal) : newValtrigger(this, TriggerOpTypes.SET, 'value') // 触发更新}}}
  • 特点

    • 对基本类型直接通过 getter/setter 监听。
    • 对对象类型内部使用 reactive 代理。
2. reactive 的实现
  • 核心机制:基于 Proxy 代理对象,拦截 get/set/deleteProperty 等操作。

  • 源码关键点

function reactive(target) {const proxy = new Proxy(target, {get(target, key, receiver) {track(target, TrackOpTypes.GET, key) // 依赖收集const res = Reflect.get(target, key, receiver)return isObject(res) ? reactive(res) : res // 递归代理嵌套对象},set(target, key, value, receiver) {const oldValue = target[key]const result = Reflect.set(target, key, value, receiver)if (hasChanged(value, oldValue)) {trigger(target, TriggerOpTypes.SET, key) // 触发更新}return result}})return proxy}
  • 特点

    • 通过 Proxy 实现深层响应式。
    • 递归代理嵌套对象(性能优化可通过 shallowReactive 避免)。

三、使用场景

1. 使用 ref 的场景
  • 需要响应式的基本类型值(如 string/number/boolean)。
  • 需要显式控制值的引用(如需要重新赋值整个对象时)。
  • 需要兼容模板自动解包(模板中无需 .value)。
2. 使用 reactive 的场景
  • 需要响应式的复杂对象或数组。
  • 需要保持对象引用不变,仅修改属性。
  • 需要深层响应式(如嵌套对象自动代理)。

四、最佳实践

  1. 优先选择 ref
    对于基本类型或需要频繁重新赋值的对象,使用 ref 更直观。

  2. 复杂对象用 reactive
    当需要处理嵌套结构且不需要重新赋值整个对象时,reactive 更简洁。

  3. 解构时用 toRefs
    解构 reactive 对象时,使用 toRefs 保持响应性:

const state = reactive({ count: 0 })const { count } = toRefs(state) // 解构后仍为 Ref 类型

五、底层原理对比

机制refreactive
依赖收集通过 getter 中的 track通过 Proxy.get 中的 track
触发更新通过 setter 中的 trigger通过 Proxy.set 中的 trigger
性能开销基本类型更低,对象类型与 reactive 相同对象类型高效,嵌套对象递归代理

总结

  • ref:更通用的响应式工具,通过 .value 访问,适合基本类型或需要重新赋值的对象。
  • reactive:专为对象设计的响应式工具,适合深层嵌套结构,直接访问属性更简洁。
  • 实现差异ref 通过 RefImpl 类包装值,reactive 通过 Proxy 代理对象。
http://www.dtcms.com/wzjs/593615.html

相关文章:

  • 织梦dedecms网站简略标题shorttitle的使用方法签订网站建设协议应注意事项
  • 大馆陶网站唐山做企业网站公司
  • 南山网站 建设深圳信科制作网站题材
  • 咸阳做网站哪家好php网站怎么做的
  • 网站地址大全站长之家网址查询
  • 免费网站整站模板源码住建城乡建设网站
  • 保定定兴网站建设做一个软件需要哪些技术
  • wordpress网站怎么加小游戏北京网站优化公司
  • 网站建设哪种语言好室内设计公司排行榜济宁
  • 建立网站 要怎么做网站信息化建设报送
  • 网站mssql 导出数据台州关键词优化价格
  • 广州市建设企业网站价格网站营销公司简介
  • 重庆网站制作建设长春seo全网营销
  • 建设网站需要了解些什么东西北京市工程建设交易中心网站
  • 广东省建设监理协会网站官网企业官方网站管理制度
  • 杭州公司网站建设电话洞头网站建设
  • 网站简繁转换代码欧洲乌克兰
  • 泉州网站设计哪家公司好通州顺德网站建设
  • 株洲公司做网站做vip视频网站侵权
  • 织梦网站搬家教程白云建设网站
  • 有部分网站打不开yellow在线视频高清观看
  • 中国手机网站网站建设教程视频教程
  • 广州市花都区建设局网站wordpress play主题
  • 权威的营销单页网站app网站开发哪里有
  • 网站建设 pdf1688品牌加盟网
  • 网站建设问题大全网费一年多少钱
  • 漂亮的门户网站公司核名查询系统
  • 光明楼网站建设上海公关公司排名
  • 企业网站需要什么网页设计页面大小是多少
  • 中小型企业网站优化案例南京领动做网站怎么样