官方介绍:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
简单来说,对 vue 应用中多个组件的共享状态进行集中式的管理(读/写)。
store._wrappedGetters
里store._mutations
里store._actions
里store.getter[ namespace + 方法名]
store.commit( namespace + 方法名 )
store.dispatch( namespace + 方法名 )
其实,不管是开发者是在局部模块还是在全局上调用 commit、dispatch,从源码层次看都是在全局调用 commit、dispatch,只不过是借助了一个命名空间来模拟了父子模块之间的独立。对应的,所有的 mutation 和 action 也是注册在全局上的。
本质上,是 new 一个全新的 Vue 实例,并将 state 和 getter 作为 data 和 computed 选项去进行处理,实现了 state 和 computed 的响应式。进而实现 “state 改变 → 视图重新渲染” 这种模式。
Vuex 内部是维护了一个单向数据流:action → mutation → state → 视图改变。
state 的改变只能通过 commit 一个 mutation 来触发。而如果是异步操作修改 state,将异步操作封装成一个 action 然后去 dispatch 触发,而 action 是不能直接改变 state,它必须 commit 一个 mutation 去改变 state。
为什么要这样做呢?我们要知道 state 维护的是全局的一个状态,它修改影响到的可能是多个组件的视图渲染,如果组件可以随意地直接改变 state,那么会 state 的改变很难追踪,导致 state 的维护困难。
所以我们需要用一个单向数据流去维护 state 的修改,能够让 state 的修改变得可预测。
原文:https://www.cnblogs.com/wsg1111/p/14402738.html