У меня есть корзина для покупок Компонент в РЕАКТЕ, где я выбираю продукты для добавления в корзину и сохраняю их идентификаторы в локальном хранилище .Теперь перед оформлением заказа отображается корзина со всеми деталями товара ( название , единица цена , кол-во , всегоЦена ) Пользователь добавил.Первоначально Кол-во равно 1 для всех внутри поля ввода количества напротив каждого продукта, где пользователь может увеличивать / уменьшать Кол-во.Существует столбец «Общая цена», который следует обновлять при каждом изменении кол-ва ** (unitPrice * Qty). **
Я использую функцию map () для отображения всех товаров в корзине.Но когда я обновляю Qty для одного продукта, он обновляет TotalPrice для всех продуктов, а не только для этого конкретного.Я знаю, что это событие becoz onChange Я сохраняю значение Qty в состоянии и умножаем на UnitPrice, так что он делает это для всех.
ПРИМЕЧАНИЕ: я не использую Redux / Flux для этого
Я не уверен, как с этим справиться в функции map ().Должен ли я использовать индекс для этого?Вот компонент корзины:
export default class Cart extends Component
{
constructor(props) {
super(props);
this.state = {
data:[],
customer: '',
redirectToReferrer: false,
cart: [],
cartItems: [],
qty: ''
};
this.onChangeQty = this.onChangeQty.bind(this);
}
componentDidMount() {
const retrieved = localStorage.getItem("cartItem");
const arr = JSON.parse(retrieved);
axios.post('http://localhost/Auth/api/customers/show_cart.php', arr,
{headers: {'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json'}
} )
.then(response => {
console.log("API response, Items in Cart are: ");
console.log(response.data.records);
this.setState({
cartItems :response.data.records
}); })
.catch(error => {
if (error) {
console.log("Error Can't Show Cart Itemsfrom local Storage");} });
}
onChangeQty(e)
{
this.setState({
qty: e.target.value
})
}
render()
{
return (
<div>
<MiniDrawer />
<div id="profileDiv">
<Row style={ {width: "100%"}}>
<Col sm="12" md="12" lg="12" >
<Card> <CardBody> <Row>
<Col md="12" lg="12" sm="12" xs="12">
<h1> <b> Your Shopping Cart </b> </h1>
<hr/>
<Table>
<thead>
<tr className="text-center">
<th> Item# </th>
<th> Image </th>
<th> ID</th>
<th> Name</th>
<th> Unit Price </th>
<th> Quantity </th>
<th> Total Price </th>
</tr>
</thead>
<tbody>
{this.state.cartItems.map( (item, i) =>
<tr>
<td className="text-center">
<h4 key={i}> {i}</h4>
</td>
<td className="text-center">
<Image src={"data:image/png[jpg];base64," + item.Image}
id="cartImage" alt="abc" />
</td>
<td className="text-center">
<h4 >{item.SparePartID}</h4>
</td>
<td className="text-center">
<h4 >{item.Name}</h4>
</td>
<td className="text-center">
<h4>{item.Price} </h4>
</td>
<td className="text-center">
<h4 key={item.SparePartID}>
<input className="text-center"
type="number"
min="1"
onChange={this.onChangeQty}
/>
</h4>
</td>
<td className="text-center">
<h4 key={item.SparePartID}>
{item.Price*this.state.qty}
</h4>
</td>
</tr>
)}
</tbody>
</Table> </Col> </Row>
</CardBody></Card> </Col></Row>
<br/><hr/><br/>
</div> </div>
); }
}
Пожалуйста, помогите мне, как обновить цену конкретного товара при изменении поля ввода Qty.Спасибо.