在 vue 3 + pinia 项目中,直接解构 `store.state[id]` 的属性会导致丢失响应性;需借助 `computed` 双向计算属性(get/set)桥接深层嵌套状态,才能安全地在模板中使用 `v-model="name"` 等简洁语法。
要在组件中将嵌套于 Pinia store 中的对象(如 things[id])解构为独立的响应式变量(如 name、type),不能使用 toRef(things.value[id], 'name') 或 toRefs(things.value[id]) —— 因为 things.value[id] 是一个普通对象(非 reactive proxy),其属性不具备响应式追踪能力,toRef 对非 reactive 对象的属性无效,导致后续修改无法触发视图更新。
✅ 正确做法是:使用 computed 定义双向计算属性,显式声明 get(读取 store 中对应字段)和 set(写回 store),从而在保持响应式链路完整的同时,获得简洁的模板绑定体验。
以下是推荐实现(适配你的 things-store 结构):
? 关键说明:
t 实时读取 thingStore.things[props.id].name,自动建立依赖追踪;⚠️ 注意事项:
通过 computed 双向绑定,你既能享受模板中 v-model="name" 的简洁性,又能确保所有变更准确同步至 Pinia store,真正实现「解构即响应」。