У меня есть состояние myrecords [] , которое содержит JSON Object в следующем формате:
{
"records": {
"Master Automotives": [
{
"SparePartID": "43",
"Name": "Oil and Lubricants",
"Price": "4500",
"VendorID": "48",
"CompanyName": "Master Automotives",
"Qty": 1,
"TotalPrice": "4500"
},
{
"SparePartID": "45",
"Name": "Lights",
"Price": "2300",
"VendorID": "48",
"CompanyName": "Master Automotives",
"Qty": 1,
"TotalPrice": "2300"
}
],
"Repair Solutions": [
{
"SparePartID": "47",
"Name": "Steering Wheel",
"Price": "1500",
"VendorID": "60",
"CompanyName": "Repair Solutions",
"Qty": 1,
"TotalPrice": "1500"
}
],
"FiveStar Automotives": [
{
"SparePartID": "51",
"Name": "Brakes",
"Price": "234",
"VendorID": "70",
"CompanyName": "FiveStar Automotives",
"Qty": 1,
"TotalPrice": "234"
},
{
"SparePartID": "53",
"Name": "Clutch",
"Price": "999",
"VendorID": "70",
"CompanyName": "FiveStar Automotives",
"Qty": 1,
"TotalPrice": "999"
},
{
"SparePartID": "55",
"Name": "LED",
"Price": "288",
"VendorID": "70",
"CompanyName": "FiveStar Automotives",
"Qty": 1,
"TotalPrice": "288"
}
]
}
}
Теперь я показываю эту запись в реагирующих js таким образом, что все элементы отображаются в строках и сгруппированы по их CompanyNames и для каждого элемента, который есть.поле ввода для количества. Кол-во равно 1 по умолчанию для всех, поэтому TotalPrice совпадает с UnitPrice.
Теперь я хочу, чтобы onChange любого конкретного поля ввода Кол-во соответствовал Элемент TotalPrice в объекте JSON Object также должен обновляться в состоянии myrecords [] .Также Кол-во также должно обновляться в состоянии myrecords [].
PS: myrecords [] содержит JSON объект не массив.
вот мой код реакции для отображения записи объекта JSON :
{Object.keys(this.state.myrecords).map((CompanyName, i) => (
<div key={CompanyName}>
<h2>Supplier: {CompanyName}</h2>
{this.state.myrecords[CompanyName].map((product, i) => (
<tr>
<td>
<h4> {product["SparePartID"]} </h4>
</td>
<td>
<h4>{product["Name"]} </h4>
</td>
<td>
<h4> {product["Price"]} </h4>
</td>
<td>
<input type="number"
value={product["Qty"]}
min="1"
onChange={(e) => this.onChangeQty(product["SparePartID"], e)}/>
</td>
<td> $ {product["TotalPrice"]}
</td>
</tr>
))}
</div>
))}
А функция onChangeQty выглядит следующим образом ** (здесь мне нужна помощь) **:
onChangeQty(sid,e)
{
const items = this.state.myrecords;
const item = items.find(item => item.SparePartID === sid);
item.Qty = e.target.value;
item.TotalPrice = item.Qty * item.Price;
this.setState({
myrecords: items
});
}