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;