vue3创建响应式数据ref和reactive的区别

reactive`ref`Vue.js中都是用于创建响应式数据的,但它们之间存在一些区别

  • 定义数据类型不同。ref主要用于定义基本数据类型,如字符串、数字、布尔值等;reactive主要用于定义对象(或数组)类型的数据,但ref也可以用来定义对象或数组,其内部会自动通过reactive转为代理对象。
  • 实现原理不同。ref通过Object.defineProperty()getset实现数据代理;reactive使用Proxy实现数据代理,并通过Reflect操作源对象内部的数据。
  • 使用方式不同。使用ref定义的数据在模板中不需要使用.value来访问,但在JavaScript代码中需要使用.value来访问或修改;使用reactive定义的数据可以直接访问和修改对象或数组的属性或元素,无需使用.value
  • 设计理念不同。ref主要是为了解决单一元素/数据的响应式问题;reactive则是为了解决JavaScript对象和数组等复杂数据结构的响应式问题。
javascript 复制代码
<script setup>
import { ref, reactive, onMounted } from 'vue'
import './index.css'

const count = ref({
  num: 0,
})
const obj = reactive({
  num: 0
})


const handleCount = () => {
  count.value.num++
  console.log(count)
}

const handleObj = () => {
  obj.num++
  console.log(obj)
}

onMounted(() => {
  console.log(1)
})
</script>

<template>
  <div class="m-home-wrap">
    <button @click="handleCount">{{ count.num }}</button>
    <button @click="handleObj">{{ obj.num }}</button>

    <div class="m-home-demo"></div>
  </div>
</template>

<style></style>

人工智能学习网站

https://chat.xutongbao.top

相关推荐
galaxy_strive2 分钟前
Qt C++插件化编写项目(1)
开发语言·c++·qt
见叶之秋14 分钟前
【C++】C++ 核心进阶(一):泛型编程基石 —— 模板初阶与 STL 体系开篇
开发语言·c++
Escalating_xu15 分钟前
【Makefile 进阶】从自动发现源文件、模式规则到目录分离与多模块递归构建
linux·开发语言
smileNicky21 分钟前
React 弹窗组件如何在新标签页打开?
javascript·react.js·ecmascript
艾莉丝努力练剑23 分钟前
【AI大模型接入SDK】Gemini模型接入知识体系
java·开发语言·网络·人工智能·网络协议·学习·http
yume_sibai25 分钟前
Element Plus 其他实用组件完全指南(10个核心组件)
前端·javascript·vue.js
传奇开心果编程27 分钟前
【Rust入门知识点学与练】第13课:枚举 Enum
开发语言·学习·rust
zhanghaha131432 分钟前
Python进阶教程:28_queue 队列模块 零基础超详细教程
java·开发语言·python
司小豆37 分钟前
第七课:DeepSeek Harness 服务与依赖注入
java·服务器·开发语言·github·ai编程
weixin199701080161 小时前
[特殊字符]《闲鱼 + 淘宝 + 1688 三平台库存同源:二手ERP主数据治理与超卖防御》(附Python源码)
开发语言·python