Единственная причина, по которой ваш дочерний элемент теряет свое состояние при повторном рендеринге родительского компонента, заключается в том, что вы назначаете новый ключ дочернему компоненту при сопоставлении.
Назначение ключа, который является уникальным, но также остается неизменным в течение -renders предотвратит возникновение этой проблемы.
Если ключ к компоненту изменяется, он не перерисовывается, а повторно монтируется, и, следовательно, значения состояния сбрасываются
Вы также можете использовать a unique value as key from data
или альтернативно используйте index
, если в данных нет уникального ключа. Однако вы должны попытаться иметь хотя бы 1 поле в данных, которое можно использовать для его уникальной идентификации
return (
{
list.map((data: any, index: any) => {
return (
<>
{
<div onClick={() => handleSelectedItems(index, data)}>
<Detailed
key={data.id} // if no id field. You can assign index
data={data}
dataIndex={index}
selected={selectedItems[0][ANY_KEY] === data[ANY_key]}
/>
</div>
}
</>
)
})
}
)