Javascript Vuex:从操作中调用getter

Javascript Vuex:从操作中调用getter,javascript,ecmascript-6,vuejs2,vuex,Javascript,Ecmascript 6,Vuejs2,Vuex,有没有一种方法可以让分派/操作在其内部调用getter mutations: { setData(state, data) { state.data = data; } } actions: { sendDataToServer({ commit }, payload) { // call getter (data) and assign to variable // do async functions from the

有没有一种方法可以让分派/操作在其内部调用getter

mutations: {
    setData(state, data) {
        state.data = data;
    }
}
actions: {
    sendDataToServer({ commit }, payload) {
        // call getter (data) and assign to variable
        // do async functions from the data returned
    }
},
getters: {
    getAppData: state => () => {
        return state.data;
    }
}
那么这里的最佳实践是什么?使用变异来更改状态,然后获取状态并将其传递给action,action将执行异步函数,还是需要重新构造实现

调用变量->通过getter获取数据->调用操作


在操作上执行所有操作(在操作上执行变异操作,在不需要getter的情况下执行操作/异步方法)?

在操作中,您可以看到第一个参数中有
{commit}
。同样,您可以传递
{commit,state}
。这样,您就可以直接访问state.data

我认为在您的示例中,您可能希望执行该操作,因为您可以使用
commit('setData')
从操作本身内部调用突变


第一个参数可以让您根据自己的喜好使用state和mutation。就我个人而言,我只在一些项目中工作过,在这些项目中,你先做动作,然后做变异以将其存储在应用程序中。例如,如果我想将汽车信息存储在服务器的某个位置,首先我要执行该操作(并将其保存到远程数据库)。一旦我确认它保存在db中,我就会在存储中进行局部变异。这完全取决于具体情况。但好的是,您可以从操作内部进行变异

除了提交之外,操作还有默认的注入参数,这些参数是
dispatch
getters
rootGetters
。所以你可以简单地写


sendDataToServer({commit,getters},payload)
访问getters。

您可以访问操作中的
getters

getters: {
   getUser(state){
      return state.user
   }
}

actions : {
    myAction({ getters }){
       let user = getters.getUser
    }
}

如果在vuex中使用nuxt和隔离文件,如下所示=

存储-
|
|--index.js
|
|--store.js
|
|--product.js
//store.js
导出常量getter={
getNameStore:state=>state.getNameStore?state.getNameStore:null

};操作处理程序接收一个上下文对象,该对象在存储实例上公开相同的方法/属性集,因此您可以调用context.commit来提交一个变异,或者通过context.state和context.getters访问状态和getters

   actions: {
            sendDataToServer(context, payload) {
                // context object contains state, commit, getters
                context.getters.getAppData
            }
        },

参考文档:

事实上,还有几个突变需要完成,不仅仅是setData,我还想更新数据。插入时,我将调用setData或更新时调用updateData,实际上我的操作是将数据发送到服务器,以更新服务器的数据(数据还包括jwt令牌),然后检查令牌是否有效,令牌是否无效,将用户重定向回第一个进程,即插入,该进程将重复。所以事实恰恰相反,异步方法在变异之前先出现。您认为呢?对于上述场景,最佳流程是什么?看起来您首先处理的是服务器。因此,如果我理解正确,异步调用API->if success,commit set/update。如果没有,则进行另一个API调用,并从头开始执行相同的步骤。是的,这是正确的,先生。。我实际上得到了我需要的,这是从您的解决方案中得到的,即在提交
{commit,state}
之后添加一个状态。谢谢除了提交之外,操作还有默认的注入参数,这些参数是
dispatch
getters
rootGetters
。所以你可以简单地写
sendDataToServer({commit,getters},payload)
访问getters@Tugayİlik您应该回答一下,这样我们就可以投票了。