isReactive 用于判断值是否为 reactive() 创建的深层响应式代理对象:返回 true 表示是 reactive 代理,false 表示普通对象、ref、readonly、shallowReactive 等其他类型。

isReactive 是 Vue 3 提供的响应式工具函数,用于**判断一个值是否是由 reactive() 创建的响应式代理对象**(即 Proxy 实例),而不是普通对象或由 ref()、shallowReactive() 等创建的其他类型响应式对象。
基本用法:直接传入目标值
调用 isReactive(value),传入待检测的值,返回 true 或 false:
- 返回
true:该值是通过reactive()创建的深层响应式代理(且不是只读代理) - 返回
false:可能是普通对象、ref、readonly包裹的对象、shallowReactive结果,或null/undefined
注意 isReactive 不识别 ref 和 readonly
isReactive 只对 reactive() 的直接结果有效,常见误区如下:
-
isReactive(ref({})) === false——ref返回的是 Ref 对象,不是 reactive 代理 -
isReactive(readonly(reactive({}))) === false——readonly返回的是另一个代理(只读代理),不满足isReactive的判定条件 -
isReactive(shallowReactive({})) === false——shallowReactive创建的代理被isReactive明确排除
配合 reactive 使用的典型场景
适合在运行时动态判断某个对象是否具备“完整深层响应性”,例如:
立即学习“前端免费学习笔记(深入)”;
- 封装通用响应式工具函数时做类型分流
- 在组合式函数中校验传入参数是否符合预期(如要求必须是
reactive对象) - 调试时快速确认对象是否被正确代理(配合
console.log(isReactive(obj)))
简单示例代码
在 setup 或组合式函数中:
import { reactive, ref, readonly, isReactive, shallowReactive } from 'vue'
const obj = reactive({ count: 0 })
const r = ref({ count: 0 })
const ro = readonly(reactive({ count: 0 }))
const shallow = shallowReactive({ count: 0 })
console.log(isReactive(obj)) // true
console.log(isReactive(r)) // false
console.log(isReactive(ro)) // false
console.log(isReactive(shallow)) // false
console.log(isReactive({})) // false(普通对象)


















