2017-04-19 75 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变量,则必须将其作为变量引用传入,就像您当前一样。