1. 声明方式
ref:可以包装任何类型的值(基本类型、对象、数组等)
const count = ref(0) // 基本类型
const obj = ref({ name: 'John' }) // 对象
const arr = ref([1, 2, 3]) // 数组
reactive:只能用于对象类型(对象、数组、Map、Set等)
const obj = reactive({ name: 'John' })
const arr = reactive([1, 2, 3])
2. 访问方式
ref:需要通过 .value 访问和修改
const count = ref(0)
console.log(count.value) // 读取
count.value = 1 // 修改
reactive:直接访问属性
const state = reactive({ count: 0 })
console.log(state.count) // 读取
state.count = 1 // 修改
3. 模板中使用
ref:在模板中自动解包,无需 .value
reactive:直接使用属性
4. 响应式
ref:是一个响应式的 ref 对象,当它的值发生变化时,会触发相应的更新
reactive:是一个响应式的对象,当它的属性发生变化时,会触发相应的更新
5. 深度响应
ref:默认不会深度响应,即对嵌套对象的修改不会触发更新
reactive:默认会深度响应,即对嵌套对象的修改会触发更新
6. 性能
ref:对于基本类型的响应式,ref 通常比 reactive 更轻量级,因为它不需要额外的代理和追踪
reactive:对于复杂的对象,reactive 通常更高效,因为它可以自动追踪所有的属性变化
7. 注意事项
ref:在模板中使用时,需要解包 .value
reactive:在模板中直接使用属性
8. 总结
选择使用 ref 还是 reactive 取决于具体的需求:
如果需要一个基本类型的响应式,可以使用 ref
如果需要一个复杂的对象的响应式,可以使用 reactive
一般来说,对于简单的数据,ref 更适合,而对于复杂的数据,reactive 更适合。
选择合适的响应式方式可以提高代码的可读性和性能。
浅记Vue3中 ref 和 reactive 是两种主要的响应式数据声明方式,它们有以下主要区别
前端-文龙刚2026-01-13 8:05
相关推荐
Aaron_Feng3 分钟前
一个小工具解决Swift Actor重入问题笨笨狗吞噬者3 分钟前
维护 uniapp 小程序端近一年,我想拉一个开发者交流群前端炒粉10 分钟前
React 面试高频题程序员陆业聪11 分钟前
让 Android 里的 AI 真正「干活」:Function Calling 工程实现全解mumuWorld13 分钟前
解决openclaw以及插件安装的报错GISer_Jing14 分钟前
前端组件库——shadcn/ui:轻量、自由、可拥有,解锁前端组件库的AI时代未来执行部之龙18 分钟前
JS手写——call bind apply京东零售技术19 分钟前
告别手动搬砖: JoyCode + i18n-mcp 实现前端项目多语言自动化李少兄19 分钟前
企业资源计划(ERP)系统全景指南张一凡9323 分钟前
React 项目也能用依赖注入?我尝试了一下,真香