У меня есть приложение для грузовиков с едой, в котором я сохранил заказ клиента в состоянии redux как массив объектов. В каждом заказе указывается каждый элемент, выбранный клиентом. Каждый предмет состоит из количества для этого предмета, названия этого предмета и общей цены предмета, которую вы получаете, умножив количество на цену этого конкретного предмета. Например, это заказ:
state.order = [
{item: "chicken taco", count: 2, total: 4},
{item: "carne asada taco", count: 3, total: 6},
{item: "horchata", count: 2, total: 5},
{item: "horchata", count: 1, total: 2.5},
{item: "carne asada burrito", count: 2, total: 16},
{item: "buche taco", count: 2, total: 5}
];
В компоненте OrderCard я сопоставляю массив заказов, чтобы отобразить заказ клиента. Счетчик для каждого указанного c элемента отображается как ввод. Я хочу, чтобы пользователь мог изменять счетчик для каждого отдельного элемента. Например, я хочу, чтобы пользователь мог изменить счетчик тако с курицей с 2 до 3. Для этого мне пришлось бы обновить состояние redux, но только для индекса state.order 0, который касается тако с курицей. Как мне go это сделать? Я действительно в растерянности.
Вот код для всего компонента:
const OrderCard = props => {
const orderCount = props.order.reduce(function(prev, cur) {
return prev + cur.count;
}, 0);
const countSelect = document.getElementById("count-select");
const increaseCount = (count) => {
count++;
}
return (
<Card className="order-card-main">
<i class="far fa-times-circle" style={{ position: 'relative', left: '0px', textAlign: 'left', width: '100%', marginTop: '3%', fontSize: '1.5rem' }} onClick={() => props.closeOrderCard()}></i>
<h1 className="order-card-title">Your Order</h1>
<p className="order-card-truck">from <span className="truck-name">{props.selectedTruck.name}</span></p>
<div className="order-items-cont">
{props.order.map(item => (
<div className="order-item-div">
<p className="order-item-count">
<input type="number" value={item.count} className="order-item-count-input" />
</p>
<p className="order-item-name">{item.item}</p>
<p className="order-item-total">{CurrencyFormatter.format(item.total, { currency: 'USD' })}</p>
<hr />
</div>
))}
</div>
<input className="order-note-input" type="text" placeholder="Note to truck..." />
<button className="pay-button">
<p className="total-items-count">{orderCount}</p>
<p>Next step: pay</p>
<p>{
CurrencyFormatter.format(props.order.reduce(function(prev, cur) {
return prev + cur.total;
}, 0), { currency: 'USD' })
}</p>
</button>
</Card>
)
}
const mapStateToProps = state => {
return {
selectedTruck: state.selectedTruck,
order: state.order
}
}
export default connect(mapStateToProps, { closeOrderCard })(OrderCard);
Вот скриншот пользовательского интерфейса для компонента: