Я создаю приложение React и у меня есть следующий список:
export const list = [
{
id: '1',
group: 'sports 1',
sports: [{
'basketball': [
{competed: true},
{won: false}
],
'soccer': [
{competed: false},
{won: false}
],
'hockey': [
{competed: false},
{won: false}
]
}],
competedInAll: false
},
{
id: '2',
group: 'sports 2',
sports: [{
'tennis': [
{competed: true},
{won: false}
],
'swimming': [
{competed: true},
{won: false}
],
'baseball': [
{competed: false},
{won: false}
]
}],
competedInAll: false
},
{
id: '3',
group: 'sports 3',
sports: [{
'volleyball': [
{competed: true},
{won: false}
],
'karate': [
{competed: true},
{won: false}
],
'surfing': [
{competed: true},
{won: false}
]
}],
competedInAll: false
}
];
Этот список помещается в состояние с перехватами React:
const [list3, updateList3] = useState(list);
Затем я перебираюсписок вроде так:
const doMagicHere = () => {};
const getStatus = (item) => {
let length = Object.values(item.sports[0]).filter(x => !x[0].competed).length;
return length === 0 ? 'competed in all sports' : length + " remaining"
};
<ul>
{list3.map(item => (
<li key={item.id}>
{item.group} ({getStatus(item)})
<ul>
{Object.keys(item.sports[0]).map((sport, i) => <li key={i} onClick={() => doMagicHere()}>{sport}</li>)}
</ul>
</li>
))}
</ul>
Это создаст:
- спорт 1 (осталось 2)
- спорт 2 (1 осталось)
- спорт 3 (соревновались во всех видах спорта)
- Как я могу добавить событие onClick, чтобы общее количество уменьшилось, когда элемент выбран (установлен на
true
), что позволит тексту читать «2 оставшихся», затем «1 оставшихся» и, в конечном итоге, «соревноваться ввсе виды спорта для этой группы