2 回答

TA贡献2080条经验 获得超4个赞
也许尝试这样的事情:
checkInvoiceData = (isUploaded, data) => {
// Return early
if (!isUploaded) return
const { invoiceData } = this.state;
const updatedInvoices = invoiceData.map(invoiceItem => {
if (invoiceItem.number !== data.savedNumber) return invoiceItem
const details = invoiceItem.details.map(detail => {
if (detail.tagNumber !== data.tagNumber) return detail
return { ...detail, id: data.id };
});
return { ...invoiceItem, details };
});
this.setState({ invoiceData: updatedInvoices });
};
首先,我建议尽早返回而不是嵌套条件。
其次,确保您没有state直接变异(例如 no this.state = state)。
第三,将你想要改变的状态部分,而不是整个状态对象,传递给setState.
第四,返回对象的一个新实例,以便对象引用更新,以便 React 可以检测到值的变化。
我并不是说这是做你想做的最好的方法,但它应该为你指明一个更好的方向。

TA贡献1875条经验 获得超3个赞
您不能改变状态,而是可以执行以下操作:
checkInvoiceData = (isUploaded, data) => {
if (isUploaded) {
this.setState({
invoiceData: this.state.invoiceData.map(
(invoiceItem) => {
if (invoiceItem.number === data.savedNumber) {
invoiceItem.details.map(
(detail) =>
detail.tagNumber === data.tagNumber
? { ...detail, id: data.id } //copy detail and set id on copy
: detail //no change, return detail
);
}
return invoiceItem;
}
),
});
}
};
添加回答
举报