triggerref用于手动通知vue更新shallowref的依赖,当直接修改其内部属性(如对象字段、数组项)绕过响应式追踪时必须调用;仅对shallowref有效,不可用于ref或reactive。

triggerRef 是做什么的
triggerRef 用于手动通知 Vue:某个 shallowRef 的值已经变化,需要重新触发依赖更新。它不改变数据本身,只“敲响响应式系统的钟”——让视图或计算属性感知到变化并重新执行。
什么时候必须用 triggerRef
当你用了 shallowRef,又做了以下操作时,Vue 默认不会更新:
- 修改对象内部属性,比如
myRef.value.name = '新名字' - 修改数组某一项,比如
myRef.value[0].done = true - 调用第三方库方法直接改了对象内容(如
lodash.set、three.js场景对象属性)
这些操作绕过了响应式系统追踪机制,此时就得靠 triggerRef(myRef) 补上最后一环。
基础写法和常见搭配
使用非常简单,就一行:
import { shallowRef, triggerRef } from 'vue'- 创建:
const data = shallowRef({ a: 1, b: { c: 2 } }) - 修改内部:
data.value.b.c = 99 - 手动触发:
triggerRef(data)
注意:不能对普通 ref 或 reactive 对象调用 triggerRef —— 它只对 shallowRef(以及某些特殊场景下的 ref)有效。对 reactive 用 triggerRef 会静默忽略。
实用技巧与避坑提醒
几个容易踩的点,帮你少走弯路:
- 别在模板里滥用:triggerRef 是逻辑层控制手段,不要试图在模板中绑定或条件调用
- 避免重复触发:一次修改后调一次即可,连续多次调用不会报错但无意义
-
配合 shallowReactive?不行:shallowReactive 没有对应的 trigger API,要手动更新只能替换整个对象(
state = { ...state, xxx }) - 和 toRef / toRefs 混用需谨慎:如果从 shallowRef 解构出 toRef,再改 toRef.value,triggerRef 仍要作用于原始 shallowRef
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










