Estou tentando resolver o Warning: Each child in a list should have a unique "key" prop.
erro, mas estou recebendo alguns resultados inesperados.
Isso funciona (sem aviso):
Página inicial.tsx
{cars?.map((car, index) => (
<Col key={index}>
<CarCard car={car} />
</Col>
))}
CartãoCard.tsx
interface IProps {
car: CarSummary
}
export default function CarCard({ car }: IProps) {
return (
<Card style={{ width: '18rem' }}>
<Card.Img variant="top" src={car.image} />
<Card.Body>
<Card.Title>{car.title}</Card.Title>
<Card.Text>
{car.text}
</Card.Text>
<Button variant="primary">Details</Button>
</Card.Body>
</Card>
)
}
Mas se eu mover o entorno <Col key={index}></Col>
para o CarCard.tsx
componente e tentar passar o index
como suporte, recebo o Warning: Each child in a list should have a unique "key" prop.
aviso.
Página inicial.tsx
{cars?.map((car, index) => (
<CarCard car={car} index={index} />
))}
CarCard.tsx
interface IProps {
car: CarSummary,
index: number
}
export default function CarCard({ car, index }: IProps) {
return (
<Col key={index}>
<Card style={{ width: '18rem' }}>
<Card.Img variant="top" src={car.image} />
<Card.Body>
<Card.Title>{car.title}</Card.Title>
<Card.Text>
{car.text}
</Card.Text>
<Button variant="primary">Details</Button>
</Card.Body>
</Card>
</Col>
)
}
O que estou fazendo de errado e recebo um erro ao tentar passar o índice como um adereço?
O React precisa que isso
key
esteja no elemento JSX superior que está sendo iterado, e não em algum lugar de seus elementos filhos. Por exemplo:Você também pode passá-lo como prop se os elementos filhos precisarem dele para alguma coisa:
Mas isso é separado do nível superior do React
key
.Observe também que o índice da matriz é uma espécie de chave de "último recurso". É melhor usar algum tipo de identificador exclusivo significativo. Por exemplo, if
car
tem umid
valor:Em muitos casos (por exemplo, uma exibição estática de
<li>
elementos sem interação) não é grande coisa... até que seja. Se a coleção fosse editável/filtrável/classificável/etc. então, usar o índice da matriz pode causar bugs difíceis de depurar.