javascript - 向 Vuex 存储对象添加新属性
问题描述
我有这个初始状态:
state: {
alertsByQuestionId: {
// <questionId>: {
// <alertId>: false
// }
}
}
当用户单击此问题的警报时,我需要将警报添加到现有状态对象。所以在突变中我这样做:
Vue.set(state.alertsByQuestionId, 22, {1 : false} );
所以它向状态添加了一个属性,我有:
state.alertsByQuestionId: {22: {1: false}}
但是当我点击另一个警报时,状态被第二个警报替换,但第一个消失了。所以当我这样做时:
Vue.set(state.alertsByQuestionId, 22, {2 : false} );
我得到:
state.alertsByQuestionId: {22: {2: false}}
但我需要的是:
state.alertsByQuestionId: {22: {1:false, 2: false}}
我究竟做错了什么?
解决方案
您正在用新对象覆盖旧对象。相反,您应该保存旧副本的副本,修改其值并将其设置回如下:
var alertsByQuestionId = {
22: {1:false}
};
let key = Object.keys(alertsByQuestionId)[0];
console.log(alertsByQuestionId);
alertsByQuestionId[key][2] = false;
console.log(alertsByQuestionId);
推荐阅读
- kubernetes - Google Kubernetes 集群没有自动缩减
- python - anaconda 使用哪个应用程序来运行 .py 脚本
- android - 我面临一个问题,当我对一个重复对象进行更改时,我在数组列表中有相同对象的重复,它也会更新其他对象
- java - multipart/form-data MutlipartFile 未通过所有 args 构造函数设置
- c++ - CMake C++ 包含静态系统库到项目 - 如何
- java - 从现有数据集中删除数字并创建新数据集
- reactjs - 有条件地记住 React 中的单选按钮选择
- ruby-on-rails - 在编辑器中打开 Ruby on rails 凭据加密文件
- php - 错误请求:无法解析 XML 400 错误 Curl PHP
- python - 在 Pythonanywhere 中点击 Reload 按钮之前如何测试我的更改?