shallowReadonly() 浅层只读代理
最后更新:2026-10-22
shallowReadonly() 浅层只读代理
shallowReadonly() 只让第一层属性只读,嵌套对象仍可修改。
| 分组 | 响应式·进阶 |
|---|---|
| 类型 | API |
| 作用域 | 组件内 |
| Vue 版本 | 3.0+ |
| SSR 支持 | 支持 |
📝 语法
const cfg = shallowReadonly({ theme: 'dark', nested: {} })
cfg.theme = 'light' // ❌ 被拦截
cfg.nested.x = 1 // ✅ 允许(嵌套未只读)
⚙️ 参数
| target | 对象 |
|---|
返回值:浅层只读代理
▶ 示例
修改下面的代码,在预览区实时查看效果:
输出:
点「改顶层」主题不变(有警告);嵌套修改被放行。
💡 要点
⚠️ 注意 浅层只读不等于安全:嵌套数据仍可被改,别用它做数据保护。
ℹ️ 说明 少数场景需要:第一层常量 + 嵌套可变引用(如缓存容器)。
🏷️ 相关进阶
💡 相关案例
更多案例即将上线。
📚 相关教程
❓ 常见问题
Q 和 readonly 的区别?
A 只锁一层:嵌套对象读写照常,readonly 则递归锁全部层级。
Q 常见使用场景?
A 少见,通常出现在对性能敏感、又需要浅层防御的内部 API。
Q 能检测吗?
A isReadonly 返回 true,isProxy 也为 true。