vue响应式数据单向流靠父组件用readonly主动封装只读视图,而非禁止传入;子组件props已是浅只读代理,深层修改无警告,需源头包装;readonly与shallowreadonly按结构选型,配合ts类型和eslint实现三层防护。

Vue 响应式数据的单向数据流强制保护,核心不是靠“禁止传入”,而是靠在源头主动封装只读视图。readonly 不是锁住原始数据,而是给访问路径加一层拦截——子组件拿到的是代理,改它会报错;原始数据照常可变,响应式更新也完全不受影响。
必须在父组件提供时就包装,不能等传到子组件再处理
子组件接收的 props 本身已是只读代理(Vue 内部自动处理),但这个只读仅对顶层属性生效,且对嵌套对象的深层修改无警告。若父组件直接传 reactive 对象过去,子组件写 props.user.profile.level = 'PRO' 不会报错,却已污染状态。
- ✅ 正确:父组件用
readonly(userInfo)或readonly(userRef)包装后再传 - ❌ 错误:子组件里对
props.user再调一次readonly()—— 多余、无效,还可能掩盖类型推导问题 - ⚠️ 注意:
readonly(ref(1))只禁.value = xxx,不防ref(1).value + 1这类读取运算,这本身安全,但别误以为“数字也被锁死了”
深只读 vs 浅只读:按数据结构选对 API
是否需要阻止所有层级的修改,取决于你暴露的数据形态和协作边界。
vue-composition-api-best-practices
Vue 3 组合式 API 与
热门下载
相关下载
精品课程
相关推荐
/
热门推荐
/
最新课程
最新文章
