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

ref对比reactive

ref对比reactive

宏观角度上来看:

  • ref用来定义基本类型数据和对象类型数据;
  • reactive用来定义对象类型数据;

区别

  1. ref创建的变量必须使用.value,当然有一些插件也可以自动添加.value;reactive就可以直接使用
  2. reactive重新分配一个新对象,就会失去响应式(可以使用Object.assign去整体替换来保持响应式);ref重新赋值的话,仍然会保持响应式;

举例

<template><div><h2>reactive vs ref 重新赋值对比</h2><div><h3>reactive 示例</h3><p>用户名: {{ reactiveUser.name }}</p><p>年龄: {{ reactiveUser.age }}</p><button @click="updateReactiveProperty">更新属性(正常)</button><button @click="wrongReassignReactive">错误重新赋值(失去响应式)</button><button @click="correctReassignReactive">正确重新赋值(保持响应式)</button></div></div>
</template><script setup>
import { ref, reactive } from 'vue'const reactiveUser = reactive({name: '张三',age: 25
})const refUser = ref({name: '张三', age: 25
})const updateReactiveProperty = () => {reactiveUser.name = '李四'reactiveUser.age = 30
}//下面这样是错误的写法,这样会失去响应式
const wrongReassignReactive = () => {reactiveUser =  {name: '王五',age: 35}
}//下面这样是正确的写法,这样会保持响应式
const correctReassignReactive = () => {Object.assign(reactiveUser, {name: '王五',age: 35})
}// ref
const updateRefProperty = () => {refUser = {name: '李四',age: 30}
}</script>

在这里插入图片描述

  • 当我们使用reactive的时候,我们可以修改对象里面的属性,这没有问题,但是如果我们想直接修改这个对象,如果不使用Object.assign的话,就会失去响应式;
  • 当我们使用ref的时候,我们可以直接对对象进行分配这样也不会失去响应式

Object.assign是个什么东西?

  • Object.assign本身是一个JavaScript的方法,可以用于合并对象。
  • 其实使用Object.assign,就是对属性的一个替换,只是它可以直接逐个的替换对象的属性;所以它也是动了属性,并没有动对象的引用;
  • 我们知道reactive返回的是一个proxy,如果我们修改proxy里面的属性,会被VUE监听到,所以我们的视图会进行更新,而Object.assign并没有动Proxy对象本身,而是对于其属性进行逐步更改

为什么ref不需要Object.assign也可以保持响应式!

  • 这个其实很好解释,相信大家都能想明白,因为ref再怎么搞也离不开value,所以你再怎么搞,也是动属性;
  • ref其实更加智能口袋,无论你往口袋放什么,他都会变成响应式的;

总结:

  1. 当处理基本类型数据的时候,必须使用ref;
  2. 如果需要重新赋值整个对象的时候,建议使用ref,更加简单;
  3. 对于复杂或者相关联对象很多的时候,使用reactive。
  4. 我们将响应式对象的原始类型属性解构为本地变量时,或者将该属性传递给函数时,使用reactive将丢失响应性连接,使用ref;

  • 其实只有一点,如果你不是强迫症患者,就是不想看到那么多的.value的话,可以再任何情况下都是使用ref来创建响应式;
  • 官方的文档里面也提出,“使用 ref() 作为声明响应式状态的主要 API。”
http://www.dtcms.com/a/577890.html

相关文章:

  • 基于融智学双重形式化的汉字汉语数学建模方法
  • 手机wap网站多少钱wordpress页面简码
  • 嘉兴网嘉兴网站建设网址大全汽车之家官方网
  • 基于单片机的智能高温消毒与烘干系统设计
  • vue.js设计与实现(待续)
  • 2025 Vue UI 组件库选型
  • 网站内置字体法治网站的建设整改措施
  • 杭州高端网站设计南宁伯才网络建站如何
  • 面试题001
  • 【C#】NLog配置同时写入网络共享路径与本地路径日志
  • 用通俗易懂 + Android 开发实战的方式,详细讲解 Kotlin Flow 中的 retryWhen 操作符
  • Android 四大组件——BroadcastReceiver(广播)
  • 好看的单页面网站模板免费下载百度知道怎么赚钱
  • HTTP与HTTPS的核心区别及加密流程全解析:从明文传输到安全通信的演进
  • 好大夫王建设在线个人网站第一推广网
  • QML学习笔记(五十三)QML与C++交互:数据转换——序列类型与 JavaScript 数组的转换
  • Spring AI Alibaba语音合成实战:从零开始实现文本转语音功能
  • 科技向善,让养老更有温度——智慧养老的痛点破局与趋势前瞻
  • flink开发遇到的问题
  • “IP 地址” 咋分类?用 “电话号码分区” 讲透 A/B/C 类地址​
  • 网站建站服务公司网站建设和续费
  • 北京朝阳双桥网站建设wordpress设置侧边栏
  • 极简后台框架
  • 基于 Python + OpenCV 的人脸识别系统开发实战
  • 智慧康养新篇章:七彩喜如何重塑老年生活的温度与尊严
  • 【生活】做面包-免揉软吐司制作教程
  • 优艾智合亮相中国 — 东盟青年和平对话会践行科技向善
  • 物联网技术助力成为雾霾治理的科技利器
  • 【轨物方案】轨物科技低压综保智慧运维方案:以AIoT重塑电气安全与能效新范式
  • 商丘做微信网站sqwyy深圳市设计网站公司