markRaw() 标记对象永不代理
最后更新:2026-10-22
markRaw() 标记对象永不代理
markRaw() 标记对象后,即使被放进响应式结构也不会被代理,适合第三方实例或大型静态数据。
| 分组 | 响应式·进阶 |
|---|---|
| 类型 | API |
| 作用域 | 组件内 |
| Vue 版本 | 3.0+ |
| SSR 支持 | 支持 |
📝 语法
const chart = markRaw(new Chart(el, opts))
const state = reactive({ chart }) // chart 不会被代理
⚙️ 参数
| value | 对象(会被打上内部标记) |
|---|
返回值:该对象本身
▶ 示例
修改下面的代码,在预览区实时查看效果:
输出:
显示「被代理?false」——标记生效。
💡 要点
💡 提示 第三方类实例(图表、编辑器、地图)放进响应式状态前先 markRaw,避免代理引发的诡异行为。
⚠️ 注意 标记不可逆且对象不响应:需要它跟随变化时不能用 markRaw。
ℹ️ 说明 适合大而静态的数据(如城市列表),避免无意义的代理开销。
🏷️ 相关进阶
💡 相关案例
更多案例即将上线。
📚 相关教程
❓ 常见问题
Q 和 shallowRef 的区别?
A shallowRef 是“只有整体替换响应”,markRaw 是“这个对象永不代理”——前者管外层,后者管具体对象。
Q 用了它数据还会更新吗?
A 不会:该对象不在响应式系统内,改动不触发渲染。
Q 能标记后取消吗?
A 不能,标记不可逆;需要响应式时请改存代理副本。