O FlatList não parece estar funcionando. Eu recebo este aviso.
VirtualizedList: faltando chaves para itens, especifique uma propriedade de chave em cada item ou forneça um keyExtractor personalizado.
Código:
<FlatList
data={[{name: 'a'}, {name: 'b'}]}
renderItem={
(item) => <Text key={Math.random().toString()}>{item.name}</Text>
}
key={Math.random().toString()} />
react-native
Edison D'souza
fonte
fonte
Respostas:
Simplesmente faça o seguinte:
Fonte: aqui
fonte
keyExtractor={(item, index) => index.toString()}
Você não precisa usar
keyExtractor
. Os documentos React Native são um pouco obscuros, mas akey
propriedade deve estar em cada elemento dadata
matriz, e não no componente filho renderizado. Então, ao invés deque é o que você esperaria, basta colocar um
key
campo em cada elemento dadata
matriz:E definitivamente não coloque uma string aleatória como chave.
fonte
Isso funcionou para mim:
fonte
keyExtractor={ ( item, index ) => `${index}` }
Você pode usar
NOTA: Usando index.toString () ou seja, espera-se que seja string.
fonte
Tenha um 'id' nos seus dados
Espero que isto ajude !!!
fonte
Uma solução simples é fornecer a cada entrada uma chave exclusiva antes da renderização
FlatList
, pois é isso que o subjacenteVirtualizedList
precisa acompanhar cada entrada.O aviso aconselha fazer isso primeiro ou fornece um extrator de chave personalizado.
fonte
este código funciona para mim:
fonte
Isso não deu nenhum aviso (transformando o índice em uma string):
fonte
caso seus dados não sejam um objeto: [na verdade, eles estão usando cada índice de item (na matriz) como uma chave]
fonte
Tentei a resposta de Ray, mas recebi um aviso de que "a chave deve ser uma string". A seguinte versão modificada funciona bem para suprimir o aviso original e esta chave de cadeia, se você não tiver uma boa chave exclusiva no próprio item:
Obviamente, se você possui uma chave única óbvia e boa no item em si, basta usá-la.
fonte
Certifique-se de escrever a declaração de retorno, caso contrário ele não retornará nada ... Aconteceu comigo.
fonte
Isso funcionou para mim:
Transformando o
keyExtractor
em umstring
mas, em vez de usar o índice, use um número gerado aleatoriamente.Quando eu usei
keyExtractor={(item, index) => index.toString()}
, nunca funcionou e ainda deu um aviso. Mas talvez isso funcione para alguém?fonte
flatlists