【vue高频面试题】第2题:Vue 3 中 ref 和 reactive 的区别是什么?什么时候用哪一个?

Vue 3 中 refreactive 使用指南(面试/实战)

主问题

问:refreactive 的区别是什么?什么时候用哪一个?

面试官追问(示例)

  • 基础区别:底层实现差异?reactive 包基本类型会怎样?
  • 使用场景:哪些场景必须用 ref?何时更适合 reactive
  • 模板绑定:为何模板里 ref 不需要 .valuereactive 是否需要?
  • 响应式嵌套:嵌套对象是否响应?深层嵌套如何优化?

参考答案 / 要点整理

1. 基础区别

特性 ref reactive
数据类型 基本类型或对象 对象或数组
返回值 包装对象 { value: ... } 直接返回代理对象(Proxy)
模板访问 模板自动解包,无需 .value 直接使用属性
底层实现 RefImpl + Proxy(访问时解包) Proxy 深度响应式

示例:

ts 复制代码
import { ref, reactive } from 'vue';

const count = ref(0);              // 基本类型 → 使用 ref
const state = reactive({ a: 1 });  // 对象/数组 → 使用 reactive

2. 使用场景

  • 选择 ref
    • 基本类型(stringnumberboolean)。
    • 需要单独引用/独立更新的值(计数器、输入值)。
  • 选择 reactive
    • 管理对象/数组的整体状态(包含多属性)。
    • 深层嵌套对象需整体响应式代理。

3. 模板绑定与 .value

<template> 中,Vue 会自动解包 ref,无需 .value。在 JS 逻辑(script)中仍需通过 .value 访问。

vue 复制代码
<template>
  <div>{{ count }}</div>   <!-- 自动解包,无需 .value -->
  <div>{{ state.a }}</div> <!-- reactive 直接访问属性 -->
  
</template>

<script setup lang="ts">
import { ref, reactive } from 'vue'
const count = ref(0)
const state = reactive({ a: 1 })
</script>

4. 响应式嵌套与优化策略

  • reactive 对嵌套对象默认递归响应式,无需手动处理。
  • 对象很大或深层嵌套场景,可拆分为多个 ref,降低单个 Proxy 的更新成本。
ts 复制代码
import { ref, reactive } from 'vue'

// 整体管理(默认深度响应式)
const user = reactive({
  profile: { name: 'Alice', age: 18 },
  settings: { theme: 'dark' }
})

// 性能敏感场景:拆分为多个 ref,按需更新
const profile = ref({ name: 'Alice', age: 18 })
const settings = ref({ theme: 'dark' })

小结(面试亮点)

  • 基本类型与独立值用 ref,对象/数组用 reactive
  • 模板自动解包 ref;JS 中访问 ref.value
  • 深层嵌套对象可用 reactive;性能敏感场景可拆分为多个 ref
相关推荐
程序员鱼皮3 分钟前
前特斯拉 AI 总监:AI 编程最大的谎言,是 “提效”
前端·后端·ai·程序员·开发
pusheng202514 分钟前
普晟传感2026年新春年会总结与分析
前端·javascript·html
谢尔登16 分钟前
React19事件调度的设计思路
前端·javascript·react.js
Emma_Maria26 分钟前
本地项目html和jquery,访问地址报跨域解决
前端·html·jquery
奋斗吧程序媛31 分钟前
常用且好用的命令
前端·编辑器
2301_7965125234 分钟前
【精通篇】打造React Native鸿蒙跨平台开发高级复合组件库开发系列:Lazyload 懒加载(懒加载的图片)
前端·javascript·react native·react.js·ecmascript·harmonyos
敲敲了个代码40 分钟前
从N倍人力到1次修改:Vite Plugin Modular 如何拯救多产品前端维护困境
前端·javascript·面试·职场和发展·typescript·vite
Yff_world1 小时前
网络安全与 Web 基础笔记
前端·笔记·web安全
Sapphire~1 小时前
Vue3-19 hooks 前端数据和方法的封装
前端·vue3
浩宇软件开发1 小时前
基于OpenHarmony鸿蒙开发医院预约挂号系统(前端后端分离)
前端·华为·harmonyos