Udd*_*ers 5 javascript store vue.js vuex
我正在使用 Vuex,而且我对它还很陌生。我想将数据提交到存储并用有效负载的内容替换状态。
我的商店是使用模块构建的,有问题的模块是用户模块,
目前我正在做类似我的突变的事情,
setUser(state, payload) {
state.user = {...payload.user}
}
Run Code Online (Sandbox Code Playgroud)
这使得我的状态在运行提交后看起来像这样
user: {
user: {
nickname: 'Bob',
host: true,
emoji: 'Smile',
passcode: 12345678,
room_id: 123
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我不想在用户对象中包含用户对象,我要么希望用户的每个属性成为状态的一部分,例如,
state : {
nickname: 'Bob',
host: true,
emoji: 'Smile',
passcode: 12345678,
room_id: 123
}
Run Code Online (Sandbox Code Playgroud)
或者它可能看起来像这样,
state : {
user: {
nickname: 'Bob',
host: true,
emoji: 'Smile',
passcode: 12345678,
room_id: 123
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我会得到state.user.user?
这是我所在州的用户模块,
export default {
state: {
user: {}
},
mutations: {
setUser(state, payload) {
state.user = {...payload.user}
}
},
actions: {
},
getters: {
}
Run Code Online (Sandbox Code Playgroud)
};
我也尝试过上面的方法state:{}
小智 1
这是因为您在下面的突变层中间接创建了另一个用户对象
setUser(state, payload) {
state.user = {...payload.user }
}
Run Code Online (Sandbox Code Playgroud)
在变异层中,状态已经代表了整个用户状态。所以这里可以直接赋值user对象。
setUser(state, payload) {
state = {...payload.user }
}
Run Code Online (Sandbox Code Playgroud)
通常状态对象需要初始化如下,
state : {
nickname: '',
host: false,
emoji: '',
passcode: null,
room_id: null
}
Run Code Online (Sandbox Code Playgroud)