vue 3 的 computed 不适合直接处理全局通知未读总数的实时聚合,因其仅支持确定性、同步、依赖明确的计算;全局未读数需协调多源异步数据、处理加载状态且依赖非响应式外部状态,应结合 pinia store 管理状态并用 watcheffect 同步数据,再由 computed 聚合。

Vue 3 的 computed 本身不适合直接处理全局通知未读消息总数的实时聚合计算,尤其当数据来源分散、跨组件或涉及异步加载时。它适合做「确定性、同步、依赖明确」的派生计算,而全局未读数往往需要协调多个响应式源、应对延迟加载、避免重复订阅或竞态问题。
为什么不能只靠 computed?
全局未读消息总数通常来自多个模块:比如系统通知、私信、审批待办、评论提醒等。这些数据可能:
- 由不同 store(如 Pinia)的 state 管理,彼此不直接响应式关联
- 初始为空,需异步拉取(如
fetchNotifications()),而 computed 不支持 await - 存在中间状态(如 loading / error),computed 返回值无法自然表达“暂无数据”或“加载中”
- 依赖非响应式外部状态(如 WebSocket 连接对象、EventBus 实例),computed 无法追踪
推荐组合方案:computed + store + watchEffect
把「聚合逻辑」交给 computed,但把「数据获取与同步」交给更合适的机制:

