Vuejs2 vue.js将方法从.vue移动到vuex存储

Vuejs2 vue.js将方法从.vue移动到vuex存储,vuejs2,vuex,Vuejs2,Vuex,情景: 在user.js中,我有: import * as mutationTypes from "../mutation-types"; import {user} from "./user_data"; export const state = { user: user ... } export const getters = { user: (state) => state.user, ... }; export const

情景: 在
user.js
中,我有:

import * as mutationTypes from "../mutation-types";
import {user} from "./user_data";

export const state = {
  user: user
  ...
}

export const getters = {
  user: (state) => state.user,
...
};

export const mutations = {
  [mutationTypes.SET_USER]: (state, payload) => {
    state.user=payload;  
  },
  ...
  );
  
  export const actions = {
  setUser: ({ commit }, payload) => {
    commit(mutationTypes.SET_USER, payload);
  },
  ...
  );
  
  export default {
  state,
  getters,
  mutations,
  actions,
};
现在,我想将几个页面中使用的方法从.vue页面移动到此存储页面: 因此,我在user.js操作中添加了以下内容:

getUser: async ({ commit }) =>{
    this.user.loading=true;    
    try{
        const res = await this.$http.post('/ajax/settings/settings_read.php');
        if (res.data.errorid=='0')
        { 
          let payload=res.data.user;
          commit(mutationTypes.SET_USER, payload);
        }
        else
        {
          this.$router.push('/auth/login').catch(() => {});
        }      
    } catch(e)
    {
      console.log(e);
    }
    this.user.loading=false;    
},
以及在.vue页面中(实际上,我在几个地方尝试了添加async/await的不同解决方案)

但是不起作用


是否可以建议将方法移动到vuex存储区的正确方法?

看起来是这样的。用户是指您所在州的用户,因此

 this.user.loading=true;    

将改变突变之外的状态。

您能更详细地描述不工作的部分吗?你有错误吗?有什么事情发生吗?什么都没有发生吗?这可能不是您的直接问题,但您正在双重导出存储状态/getter/突变/操作。您可以单独导出存储属性,也可以将它们作为对象导出,但不能同时导出两者。@zcoop98谢谢。你的意思是我应该在
const
之前删除所有
export
,或者完全删除
export default{state,getter,mutations,actions,}?我想你实际上可以做两件事;我更熟悉导出对象,但您更熟悉的东西都可以:)哦。。如何删除这两者:-(实际上我对任何解决方案都不太熟悉,我现在得到的错误(经过一些更改)是
无法读取未定义的
的属性'$http',其中
this.$http.post(…)
axios
,但是
axios
不是在
user.js
中定义的,而是在
main.js
 this.user.loading=true;