FlatList, похоже, не работает. Я получаю это предупреждение.
VirtualizedList: отсутствуют ключи для элементов, обязательно укажите свойство ключа для каждого элемента или предоставьте настраиваемый keyExtractor.
Код:
<FlatList
data={[{name: 'a'}, {name: 'b'}]}
renderItem={
(item) => <Text key={Math.random().toString()}>{item.name}</Text>
}
key={Math.random().toString()} />
react-native
Эдисон Д'суза
источник
источник
Ответы:
Просто сделайте это:
Источник: здесь
источник
keyExtractor={(item, index) => index.toString()}
Вам не нужно использовать
keyExtractor
. Документация React Native немного неясна, ноkey
свойство должно быть в каждом элементеdata
массива, а не в отображаемом дочернем компоненте. Так что, а нечего и следовало ожидать, вам просто нужно поместить
key
поле в каждый элементdata
массива:И уж точно не ставьте в качестве ключа случайную строку.
источник
Это сработало для меня:
источник
keyExtractor={ ( item, index ) => `${index}` }
Ты можешь использовать
ПРИМЕЧАНИЕ. Использование index.toString (), т.е. ожидается, что это строка.
источник
В ваших данных должен быть идентификатор
Надеюсь это поможет !!!
источник
Простое решение - просто дать каждой записи уникальный ключ перед рендерингом
FlatList
, поскольку это то, чтоVirtualizedList
нужно базовому элементу для отслеживания каждой записи.Предупреждение предлагает сделать это в первую очередь или предоставляет специальный экстрактор ключей.
источник
этот код работает для меня:
источник
Это не дало никаких предупреждений (преобразование индекса в строку):
источник
в случае, если ваши Данные не являются объектом: [на самом деле он использует каждый индекс элемента (в массиве) в качестве ключа]
источник
Пытался ответить Рэю, но потом получил предупреждение, что «ключ должен быть строкой». Следующая модифицированная версия хорошо работает для подавления оригинала и этого предупреждения о строковом ключе, если у вас нет хорошего уникального ключа для самого элемента:
Конечно, если у вас есть очевидный и хороший уникальный ключ на самом предмете, вы можете просто использовать его.
источник
Обязательно напишите оператор return, иначе он ничего не вернет .. Со мной случилось.
источник
Это сработало для меня:
Превращение
keyExtractor
в,string
но вместо использования индекса используйте случайное сгенерированное число.Когда я использовал
keyExtractor={(item, index) => index.toString()}
, он никогда не работал и все равно вылетал предупреждение. Но, может быть, это у кого-то работает?источник
flatlists