2017-04-19 45 views
0

我有幾個vuex模塊。爲簡單起見,我將解釋我的問題的一個例子,我現在面臨什麼:訪問rootState中不同模塊的突變

我有2個vuex模塊firstModule.jssecondModule.js

firstModule.jsmyArray[ ]在它的狀態:

//firstModule 

const state = { 
    myArray: [//has some items] 
} 

secondModule.js我有一個從室外廣告異步讀取一些數據的動作最終API。

這一行動承諾應搜索獲取的數據是否存在於突變firstModule的myArray[ ]

  • 如果所取得的數據存在於firstModule的myArray[ ],然後將其添加到secondModule的newArray[ ]

    const state = { 
        newArray: [] 
    } 
    
    const mutations = { 
        addToNewArray: (state, payload) => { 
         function findIyem(value){ 
          return value === payload.data; 
         };  
    
         var item = payload.rootData.myArray.find(findItem); 
         state.newArray.push(payload.data); 
        } 
    } 
    
    const actions = { 
        fetchData: ({commit, rootState}) => { 
         // fetches some data from external API 
         var fetched data = data // data is which I received from fetching 
    
         commit('addToAnotherArray', {data: data, rootData: rootState.firstModule.myArray} 
        } 
    } 
    

但是,這裏的問題:

  • 根據模塊不得到rootState訪問docs突變,只有動作和getter得到沒有訪問rootState

  • 在突變中訪問rootAtate,我如何執行上面執行的邏輯?

  • 我是否必須在操作中訪問rootState並將它作爲有效負載傳遞給承諾突變,如上所述?

回答

0

根據我的經驗,vuex模塊中的突變應該直接影響模型的描述方式。所以,你的addToNewArray方法應該簡單地將有效載荷數據添加到該州的newArray屬性中。

操作是您的邏輯代碼應該運行以確定是否進行突變的位置。您可以在fetchData操作中檢查您的第一個模塊的myArray。這是最佳做法。

但是,如果您確實需要訪問突變中的rootState變量,則必須將其作爲變量引用傳入,就像您當前一樣。