当多个不相关的组件要读写同一份数据、或兄弟组件间来回传递时,props 与事件链会演化成蜘蛛网。Vuex 的思路是把这份数据搬进一个全局 store:state 存数据、mutations 同步改、actions 处理异步、getters 派生计算,所有变更经过显式通道,方便追踪与调试。
在 Vue 3 时代官方推荐转用 Pinia:API 更简洁、没有 mutations 的双层结构、TypeScript 支持更好,且可以按模块天然拆分多 store。新项目不建议再上 Vuex,但大量存量项目仍在运行,理解它的 store 结构对维护旧代码必不可少。
// Vuex 四件套的最小形态(框架思想演示) var store = { state: { count: 0 }, mutations: { increment: function (s, n) { s.count += n; } // 同步修改 }, actions: { incrementAsync: function (ctx, n) { setTimeout(function () { ctx.commit('increment', n); }, 300); // 异步提交 } }, getters: { double: function (s) { return s.count * 2; } // 派生计算 } }; // 组件里只能 commit mutation,不能直接改 state,保证变更可追踪 store.state.count; // 0 store.mutations.increment(store.state, 5); store.state.count; // 5