在 Vuex 中维护通知角标数字最清晰可靠,通过 state 定义 noticeUnreadCount 字段、mutations 封装 SET_NOTICE_UNREAD_COUNT 等操作、mapState/mapGetters 读取,并统一处理轮询、WebSocket、登录登出等场景的数据同步。
直接在 Vuex 中维护通知角标数字是最清晰、可追踪的方式。它避免了事件总线或本地缓存带来的状态不一致问题,尤其适合右上角红点这类需跨页面实时同步的 UI 状态。
在 store/index.js 的 state 中声明一个明确字段,比如 noticeUnreadCount:
0 或从登录后接口拉取的默认值(如 localStorage.getItem('unread') || 0)badge 或 num
所有修改都必须走 mutation,保证变更可调试、可回溯:
SET_NOTICE_UNREAD_COUNT:接收新数值,直接赋值INCREMENT_NOTICE_UNREAD:用于新增一条未读时 +1RESET_NOTICE_UNREAD:点击进入消息页后清零state.noticeUnreadCount = ...
不要每次都写 this.$store.state.noticeUnreadCount,推荐两种方式:
mapState 映射到 computed:简洁且自动响应mapGetters 封装逻辑(例如:只在 >0 时显示红点,showBadge: state => state.noticeUnreadCount > 0){{ noticeUnreadCount }},Vue 会自动监听变化不同来源的数据变更,统一归口到 store:
commit('INCREMENT_NOTICE_UNREAD')
commit('SET_NOTICE_UNREAD_COUNT', 0)
commit 初始值