1
resposta

Key

Pelo que percebi quando passo o item.id do KeyExtractor como type number eu recebo um Warning mas quando eu converto em string

keyExtractor={ item => item.id.toString() }

ele funciona tudo certo.

Outra alternativa é você mandar o index do próprio array_map

keyExtractor={ (item, index) => index.toString() }

att,

1 resposta

Fala Igor, tudo bem ?

Bem observado, em alguns releases a frente da versão usada no curso, o RN realmente optou por controlar as chaves dos nodes criados dinamicamente (via map, por exemplo) apenas com strings, mandando essa warning caso usemos algo diferente.

Só uma coisa que é importante notar, é que a key prop requerida por ele para cada node gerado deve ser única, e de preferencia conceitualmente falando, ou seja, gerada através de alguma propriedade inerente ao estado do objeto carregado cuja representação visual será criada. Isso é feito pra garantir eficiência ao executar qualquer re-rendenring. Quando alteramos o estado do objeto ou recebemos novas props, o react tem que processar as alterações em memória e fazer o diff pra reconciliar o estado renderizado na tela (equivalente ao DOM na web) com o novo. No caso, se algum conflito existir entre as chaves geradas pelo index map, podemos ter problemas de atualização. Não é uma boa prática acoplar a chave do elemento com uma propriedade proveniente da infraestrutura do map javascript. Seria legal permanecer com a estratégia de usar o id (ou qualquer outra propriedade que tenha unicidade garantida no front e no back para os elementos.), mesmo que nesse caso do curso ambas funcionem.

Eu costumo fazer assim:

keyExtractor={ item => String(item.id) }

que é mais ou menos o que você fez no primeiro trecho de código.

Abraço!