arrays - 当状态是对象数组时如何更新特定值 - React
问题描述
我是 ReactJs 的新手,我正在尝试为 ipotetic 电子商务做一个简单的汇总篮:当你添加一个产品时,你需要知道它是否已经存在,在这种情况下只增加项目编号。
如您所见,如果该行不存在,我做了一个 concat (行它是一个对象
{
id: singleProd.id,
name: singleProd.name,
price: singleProd.price,
value: 1
}
),但如果存在,我只需要增加 value 属性
state = {
counters: []
};
addCounter = row => {
let countersRows = this.state.counters;
let existRow = countersRows.filter(c => c.id === row.id);
if (existRow.length !== 0) {
let index = countersRows.findIndex(x => x.id === existRow[0].id);
console.log("Update here... like this.state.counters[index].value + 1?");
} else {
this.setState({ counters: countersRows.concat(row) });
}
};
deleteRow = counterId => {
const counters = this.state.counters.filter(c => c.id !== counterId);
this.setState({ counters });
};
我听说过对象分配,但我不知道该怎么做。非常感谢。
解决方案
看起来您只是想增加具有匹配 ID 的第一项的 value 属性。如果是这样,这是你想要的吗?
addCounter = row => {
const { counters } = this.state;
const existingRow = counters.filter(c => c.id === row.id)[0];
if (existingRow.length !== 0) {
this.setState(
Object.assign(existingRow, { value: existingRow.value + 1 })
);
} else {
this.setState({ counters: counters.concat(row) });
}
};
推荐阅读
- c - 恢复停止的进程不会恢复其子进程
- machine-learning - 谷歌 colab 上的 Yolo v3 培训
- html - 如何在第二行的 div 内对绝对定位的跨度进行文本溢出?
- delphi - 当文本有三行或更多行时,我如何知道是否在 TRichEdit 中选择了所有文本?
- javascript - 如何将 Vuex 集成到 Storyblok 插件中?
- postgresql - 无法从 jenkins 连接到 postgresql rds 实例
- flutter - 如何在android studio中将下面的xml文件转换为flutter dart类文件?
- javascript - 如何在 javascript/Angular 中将 [object object] 转换为文件?
- javascript - 如何将此子组件中的道具传递给父表单
- angular - ComponentFactoryResolver.resolveComponentFactor 的对象可能是“未定义”