No Preact, quero exibir um objeto:
export default function Component() {
const obj = { a: 'a', b: 'b'}
const elements = [];
for (const [key, value] of Object.entries(obj)) {
elements.push(<>{key}: {value}<br></br></>)
}
return (
<article>
{elements}
</article>
);
}
Isso retorna bem:
a: a
b: b
No entanto, se eu extrair o elemento em um elemento JSX separado como este:
function Element({ key, value }) {
return (<>{key}: {value}<br></br></>);
}
export default function Component() {
const obj = { a: 'a', b: 'b'}
const elements = [];
for (const [key, value] of Object.entries(obj)) {
// elements.push(<>{key}: {value}<br></br></>)
elements.push(<Element key={key} value={value} />)
}
return (
<article>
{elements}
</article>
);
}
Então todas as chaves ficam indefinidas:
: a
: b
Por que isso acontece?
key
é um suporte especial em (p)react, usado pela estrutura como uma dica de como reorganizar os elementos com segurança e eficiência. Você precisará usar outro adereço.Para uma explicação rápida das teclas, continue lendo.
Veja o exemplo a seguir como resultado de uma renderização de componente.
O problema aqui é que não está claro o que foi feito:
(p)react só poderia adivinhar, e é por isso que usamos chaves.
Com as chaves, o (p)react consegue atualizar a lista de maneira correta e rápida, pois sabe exatamente o que aconteceu (b foi removido).
O tutorial do Preact tem uma seção inteira sobre chaves, caso você queira saber mais: https://preactjs.com/tutorial/08-keys