В настоящее время я столкнулся со следующей проблемой: я работаю над веб-приложением для реагирования, которое содержит один компонент, отображающий продукты, содержащиеся в состоянии массива продуктов. Продукт можно добавить, щелкнув строку таблицы в таблице реакции, которая содержит различные продукты. Продукт можно добавить несколько раз, щелкнув один и тот же продукт.
getTdProps={(state, rowInfo, column, instance) => {
return {
onClick: (e, handleOriginal) => {
that.props.handleProductSelect(rowInfo.original);
}
};
}}
Если щелкнуть строку таблицы, вызывается функция handleProductSelect, которая передает исходные данные в качестве параметра.
handleProductSelect(oSelProduct) {
oSelProduct["amount"] = 1;
oSelProduct["selectedVariantOptions"] = [];
this.setState(
prevStates => ({
products: [...prevStates.products, oSelProduct]
}),
() => {
...
}
);
}
Выбранный продукт будет добавлен в массив продуктов, компонент будет повторно отрисован, и продукты будут показаны в стандартной таблице html.
Каждый визуализированный продукт содержит кнопку «плюс» и «минус» для изменения количества каждого продукта. Кнопка плюса, например вызывает функцию handlePlusButton:
handlePlusButton(i) {
this.setState(state => {
const products = state.products.map((product, j) => {
if (j === i) {
product.amount = product.amount + 1;
return product;
} else {
return product;
}
});
return {
products
};
});
}
Проблема: если я нажму на один и тот же товар несколько раз, они будут добавлены в массив товаров. Теперь, если я нажму кнопку «плюс», чтобы изменить сумму, каким-то образом сумма будет изменена для всех продуктов, которые были добавлены. Так что как-то похоже, что в массив товаров добавлена ссылка. Как я могу избежать такого поведения?