Vuex和全局对象的不一样:vue
1.Vuex的状态存储是响应式的。当Vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会相应地获得高效的更新。vuex
2.不能直接改变store中的状态。改变store中的状态的惟一途径就是显示地提交(commit)mutation。这样使得咱们能够方便地跟踪每个状态的变化,从而让咱们可以实现一些工具帮助咱们更好地了解咱们的应用。promise
1.State异步
1.Vuex 使用单一状态树,即每一个应用将仅使用一个store实例。函数
2.Vuex经过store选项,提供了一种机制将状态从根组件注入到每个子组件中。工具
3.借助mapState函数帮咱们生成计算属性,少按几回键盘。spa
4.使用对象展开运算符合并对象。?----如何使用插件
5.在某些状况下,有些状态严格属于单个组件,这时候状态仍是做为组件的局部状态好,没有必要将全部的状态都放入Vuex,不然会使得代码变得冗长和不直观。对象
2.Getterblog
1. 有时候须要从state中派生出一些状态供组件使用,能够在store中设置getters属性(相似于组件的计算属性),组件经过$.store.state.getter.访问使用。
2.getter也能够接受其余getter来做为第二个参数使用。
3.能够经过getter返回一个函数,给getter传参。
4.经过mapGetters将stroe中的getter映射到局部计算属性。
3.Mutation
1.状态改变的惟一方法是提交mutation,经过在vue中调用$.store.commit来调用相应的mutation修改相应的状态。
2.提交载荷:commit中能够传入额外的参数,来为mutation提供参数,一般这个参数是一个对象。
3.对象风格的commit:commit能够采用对象风格
4.可使用常量来代替Mutation事件类型
5.mutation必须是同步函数
6.可使用mapMutations辅助函数将组件中的methods映射为store.commit
4.Action
1.actions属性中能够定义异步操做
2.经过$.store.dispatch出发相应的方法
3.可使用mapActions辅助函数将组件中的methods映射为store.dispatch调用
4.结合回调函数,能够组合使用action(ES6 promise ?)
5.Module
1.应用的全部状态集中到一个store中管理时store对象会变得很是臃肿,为了解决这个问题,vuex容许使用module分模块 。
2.命名空间:经过添加namespated:true是模块成为带命名空间的模块,这样全部模块内部的getter、action、mutation都会根据模块注册的路径调整命名 。
3.使用了命名空间后getter、mutation和action的触发:
a. getter的第三个参数为rootState,第四个参数为rootGetters,这样在getter中就能够经过rootState和rootGetters访问根节点的信息,而想触发自己的getter和原来同样。
b. 若想在全局空间内分发action或提交mutation只须要在dispatch或commit的第三个参数中添加{root:true}便可
4.在带命名空间的模块中注册全局 action,只须要在action中添加root:true,并将action的定义放在函数handler中便可
5.对于本身开发的插件若是提供了模块,能够给定插件的参数命名对象来容许用户本身制定命名空间。
6.模块动态注册:registerModule()