Vue3 响应式数据最佳实践速查表

背景

ref(),reactive() ???每次记不住该用什么比较合适?

为此整理一个 Vue3 响应式数据最佳实践速查表,涵盖基础值、对象、数组、表单这几类常见场景。


📌 Vue3 响应式数据定义速查表

1. 基础值(string / number / boolean)

👉 推荐用 ref

csharp 复制代码
import { ref } from 'vue'

const count = ref(0)
const title = ref('Hello Vue3')
const isVisible = ref(true)

✅ 场景:计数器、开关、单一状态。


2. 对象(结构化数据)

👉 推荐用 reactive

php 复制代码
import { reactive } from 'vue'

const user = reactive({
  id: 1,
  name: 'Tom',
  age: 20
})

user.name = 'Jerry'   // 直接修改即可

✅ 场景:用户信息、复杂状态对象。

⚠️ 注意:不能整体替换 user = { ... },只能改属性。

👉 如果需要整体替换 → 用 ref({}) 更合适。


3. 数组(列表数据)

👉 推荐用 ref([])

csharp 复制代码
import { ref } from 'vue'

const users = ref<{ id: number; name: string }[]>([])

// 整体替换
users.value = [{ id: 1, name: 'Tom' }]

// 修改内容
users.value.push({ id: 2, name: 'Jerry' })

✅ 场景:表格、分页、查询结果(经常整体替换)。

👉 如果只修改,不会整体替换:

c 复制代码
const tags = reactive<string[]>(['vue', 'react'])
tags.push('angular')

4. 表单数据

👉 推荐用 reactive + toRefs,方便解构使用

php 复制代码
import { reactive, toRefs } from 'vue'

const form = reactive({
  username: '',
  password: '',
  remember: false
})

const { username, password, remember } = toRefs(form)

✅ 场景:登录表单、注册表单、复杂输入表单。

👉 如果表单需要 整体重置,可以这样:

php 复制代码
Object.assign(form, { username: '', password: '', remember: false })

5. DOM 引用

👉 必须用 ref

xml 复制代码
<template>
  <input ref="inputEl" />
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue'

const inputEl = ref<HTMLInputElement | null>(null)

onMounted(() => {
  inputEl.value?.focus()
})
</script>

✅ 总结口诀

  • 单值用 ref
  • 对象用 reactive (要整体替换就改成 ref({})
  • 数组推荐 ref([]) (便于整体替换)
  • 表单用 reactive + toRefs
  • DOM 元素用 ref

相关推荐
狗哥哥13 小时前
Swagger对接MCP服务:赋能AI编码的高效落地指南
前端·后端
zl_vslam13 小时前
SLAM中的非线性优-3D图优化之相对位姿Between Factor(六)
前端·人工智能·算法·计算机视觉·slam se2 非线性优化
申阳13 小时前
Day 18:01. 基于 SpringBoot4 开发后台管理系统-快速了解一下 SpringBoot4 新特性
前端·后端·程序员
500佰13 小时前
技术包办模式给我带来的反思
前端
g***727013 小时前
spring-boot-starter和spring-boot-starter-web的关联
前端
用户414292960723913 小时前
解决「买不到、买得贵、买得慢」:反向海淘独立站的核心功能设计与案例复盘
前端·后端·架构
N***p36513 小时前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
五号厂房13 小时前
网络请求库通用封装(GET/POST + 超时 + 传参)+fetch
前端
小雨青年13 小时前
智能交互新范式:拒绝“黑盒”,带你用 MateChat 与 DSL 构建“高可靠”的 NL2UI 引擎
前端·ai·华为云
anyup13 小时前
🔥牛逼!3分钟生成 5 套主题,还能一键切换暗黑模式!
前端·前端框架·uni-app