javascript - Vuejs - 提交属性时的 Vuex 行为
问题描述
当我尝试改变状态 obj 中的属性时,我注意到 Vuex 中有一个奇怪的行为。
例子:
Mutation: {
authUser: (state, payload) => {
state.email = payload.email
state.password = payload.password
...someOtherProps
}
actions: {
commit ('authUser', {
email: 'user@gmail.com'
})
}
我注意到的是,当我只提交一个属性(在本例中为“电子邮件”)时,authUser 的所有其他属性的值将是未定义的,并且只有电子邮件值可用。
这就是 Vuex 在这种情况下的行为方式吗?如果是,我怎样才能避免其他道具没有得到空值?
谢谢
解决方案
您正在传递一个没有password
定义属性的对象,因此它将state
相应地更新该对象。
我只是遍历 的属性payload
来更新每个相关的state
对象属性。正如@82Tuskers 指出的那样,Vue.set
如果对象中的属性在payload
对象上尚不存在,则需要使用state
(否则该属性不会是反应性的):
authUser: (state, payload) => {
for (prop in payload) {
if (state.hasOwnProperty(prop)) {
state[prop] = payload[prop];
} else {
Vue.set(state, prop, payload[prop]);
}
}
}
这样,只有在对象中传递的属性payload
才会在对象上更新state
。
推荐阅读
- javascript - 如何将数据从客户端发送到树莓派?
- javascript - 使用 !obj 简单地检查 undefined 和 null
- vba - VBA Internet Explorer Windows 可见且不关闭
- python - CSV 导入 Python 中的空格分隔符
- c++ - 通过写入局部变量的 SIGSEGV
- mysql - MYSQL - 查询从前 N 个不同元素中提取所有列
- c++ - 使用 std 或 boost 库的 C++ 中 Qtimer 的等价物是什么?
- c# - 如何通过公共列合并两个不同类型的列表?
- android - 直接回复消息的 Android O 通知
- android - 失去 layout_margin 的子视图