Я использую реакцию и пытаюсь редактировать объекты при нажатии кнопки. В настоящее время я отобразил 2 кнопки на странице, которые отображают их правильные значения, но при нажатии кнопки я получаю, что buttonUpgrades.map не является функцией. Функция changeButtonData может регистрировать правильные данные, но я не могу внести какие-либо изменения в данные.
Насколько я понимаю, причина, по которой отправляется ошибка, заключается в том, что buttonUpgrades является объектом, но я не знаю, как решить эту проблему.
import React, { useState } from "react";
const UpgradeButton = () => {
const [buttonUpgrades, updateButtonUpgrades] = useState([
{
id:0,
name: "Upgrade one",
cost: 5,
amount: 0,
damage: 1,
damageGrowth: 1.1,
},
{
id:1,
name: "Upgrade two",
cost: 6,
amount: 0,
damage: 2,
damageGrowth: 1.2,
},
]);
const changeButtonData = (data) => {
let {name,cost,damage} = data;
updateButtonUpgrades(...buttonUpgrades, name="new name") // this wont let me change the value that has been assigned
console.log(name) // this logs the name assigned to the button
}
return(
buttonUpgrades.map((upgrade)=>
<button key={upgrade.id}onClick={()=>changeButtonData(upgrade)}>
<h1>Cost:{upgrade.name}</h1>
<h1>Cost:{upgrade.cost}</h1>
<h1>Damage:{upgrade.damage}</h1>
</button>
)
)
}
export default UpgradeButton;
Изменить: решение, если кто-нибудь столкнется с этим:
const changeButtonData = (data)=>{
const {id,name,cost,amount,damage,damageGrowth} = data;
updateButtonUpgrades(buttonUpgrades.map(buttonProps=>(buttonProps.id===id ? {...buttonProps,damage:damage * damageGrowth}:buttonProps)))
}