vuex 使用文档小结篇

2020-06-16 05:41:34易采站长站整理


actions: {
        actionA({commit}){
        return new Promise((resolve)=>{
            setTimeout (() => {
              commit('someMutation')
              resolve()
            },1000)
          })
        }
      }

  现在你可以     


store.dispatch('actionA').then(()=>{
        //...
      })

  在另一个 action 中也可以  


actions: {
      actionB({dispath,commit}){
        return dispatch('actionA').then(() => {
        commit('someOtherMutation')
      })
    }
    }

  我们利用async/ await   


// 假设 getData() 和 getOther() 返回的是一个 Promis
    actions:{
        async actionA ({commit}){
          commit('gotData',await getData())
        },
        async actionB({dispatch,commit}){
          await dispatch('actionA') // 等待 actionA 完成
          commit('goOtherData', await getOtherData())
        }
      }

    Modules

      使用单一状态树,当应用变的很大的时候,store 对象会变的臃肿不堪。

      Vuex 允许我们将store 分割到模块。每一个模块都有自己的state, mutation,action, getters, 甚至是嵌套子模块从上到下进行类似的分割。     


const moduleA = {
          state: {...},
        mutations: {...}
        actions: {...}
        getters:{...}
        }
    const moduleA = {
        state: {...},
        mutations: {...}
        actions: {...}
      }
    const store = new Vuex.Store({
      modules: {
          a:moduleA,
          b:moduleB
        }
      })
    store.state.a // -> moduleA 的状态
    store.state.b // -> moduleB 的状态

模块的局部状态

    对于模块内部的 mutation 和 getter, 接收的第一个参数是模块的局部状态。