Вот пример того, как разделить логику на два компонента и вывести список активов
function myAwesomeComponent() {
const [marketData, setMarketData] = useState([
{
id: 0,
name: 'Lombard',
prevgroupinputrate: 0.01,
currgroupinputrate: 0.02,
mktratedelta: 0.03,
mktrateestimate: 0.04,
},
{
id: 1,
name: 'Other Secured',
prevgroupinputrate: 0.01,
currgroupinputrate: 0.02,
mktratedelta: 0.033,
mktrateestimate: 0.04,
},
{
id: 2,
name: 'Unsecured',
prevgroupinputrate: 0.01,
currgroupinputrate: 0.02,
mktratedelta: 0.0333,
mktrateestimate: 0.04,
},
]);
const onChange = (asset) => (event) => {
setMarketData((oldMarketData) => {
const index = oldMarketData.indexOf(asset);
const oldAsset = oldMarketData[index];
const newMarketData = [...oldMarketData];
newMarketData[index] = {
...oldAsset,
mktratedelta: event.target.value,
};
return newMarketData;
});
};
return (
<>
{marketData.map((asset) => (
<Asset asset={asset} onChange={onChange} />
))}
</>
);
}
const Asset = ({ asset, onChange }) => (
<Segment key={asset.id}>
<div> {asset.name}</div>
<div> {asset.prevgroupinputrate}</div>
<div> {asset.currgroupinputrate}</div>
<input value={asset.mktratedelta} onChange={onChange(asset)} />
<div> {asset.mktrateestimate}</div>
</Segment>
);
Если вы имеете влияние на имена свойств из массива marketData, вам следует рассмотретьиспользуя camelCase, поэтому
{
id: 0,
name: 'Lombard',
prevgroupinputrate: 0.01,
currgroupinputrate: 0.02,
mktratedelta: 0.03,
mktrateestimate: 0.04,
}
становится
{
id: 0,
name: 'Lombard',
prevGroupInputrate: 0.01,
currGroupInputrate: 0.02,
mktRateDelta: 0.03,
mktRateEstimate: 0.04,
}