vuex简单整理

  • index.js:入口文件
  • state.js:存储状态。也就是变量。
  • getters.js:派生状态。也可以理解为set、get中的get。有两个可选参数,state、getters分别可以获取state中的变量和其它getters。和vue中的computed类似。
  • mutations.js:提交状态修改。可以理解为set、get中的set。每一个mutation都有一个字符串的事件类型和回调函数。第一个参数默认为state。vuex中唯一修改state的方式,不支持异步操作。和vue中的methods类似。
  • mutation-types.js:存储于mutations相关的字符串常量,方便检测和管理。
  • actions.js:和mutations类似。支持异步操作,也可以是对mutations的封装。

Mutation: ADD_DB(state) { state.cartList.forEach(function(item) { item.num = 0; }); }, action sortNumStatus: ({ commit }) => { commit(types.ADD_DB); }, 通過action中的commit(xxx)方法觸發mutation中的xxx(state) {state.xxx = xxx} 來更改state中的數據 如何觸發action呢 ...mapActions([ 'sortNumStatus' ]), 或者直接 methods:{ this.$store.dispath('sortNumStatus',arr); } getters可以全局操作更改state中數據 getters: module.exports = { getInfos(state) { state.cartInfos.total_price = 0; state.cartInfos.total_nums = 0; return state.cartInfos; }, getCartList(state) { return state.cartList; } }; 調用getters中的全局的方法 computed:{ ...mapGetters([ 'xxxxx' ]) }

  总结: 

1、应用层级的状态应该集中到单个 store 对象中,状态对象太复杂的时候可以划分module。

2、提交 mutation 是更改状态的唯一方法。

3、在触发方法上:

action的触发是dispatch

mutation的触发是commit;

4、在功能上:

state保存的是数据

getters是对state进行二次加工

action的处理函数的功能最终是commit mutation

mutation处理函数的功能最终是改变state

5、在同步异步上:

异步逻辑都应该封装到 action 里面

mutation 是同步的,不能出现异步

6、在流程上:

vue component—-dispatch—->actions—-commit—->mutations—-mutate—->state—-render—->vue component。从而形成闭环。见图:

7、辅助方法的映射上:

mapGetters、mapState 都是用在computed声明里面;

mapActions、mapMutations则都是用在methods声明里面。

原文地址:https://www.cnblogs.com/objectjj/p/11097114.html