React Native-использовать keyExtractor с FlatList
Я получаю:
"VirtualizedList: missing keys for items, make sure to specify a key property on an item or provide a custom keyExtractor"
довольно запутанным..., массив, который я передаю, имеет ключевое свойство, определенное в каждом объекте в массиве. У меня есть этот массив, определенный в этом.государство. Чтобы убедиться, я быстро распечатал на консоли: печать из массива
каждый объект в массиве определяется как:
var obj = {key: doc.id, value: doc.data()};
(doc и данные из другой части моего приложения, но я знаю doc.id уникален)
после некоторого googling я тогда попытался определить ключевой экстрактор следующим образом:
_keyExtractor = (item, index) => item.key;
и вот мое определение flatlist:
<FlatList
style={{}}
data={this.state.FeedDataCollection}
keyExtractor={this._keyExtractor}
renderItem={(rowData) =>this.RenderFeedCard(rowData)}
/>
по-прежнему получать ту же ошибку, на данный момент не совсем уверен, как справиться с этим или что он делает неправильно. Есть Идеи? Большое спасибо!
3 ответов
"VirtualizedList: отсутствуют ключи для элементов, обязательно укажите ключ свойство элемента или предоставить пользовательский keyExtractor"
это предупреждение о том, что в элементах списка отсутствуют ключи. Эти уникальные ключи позволяют VirtualizedList (на котором построен FlatList) отслеживать элементы и действительно важны с точки зрения эффективности.
вам придется выбрать уникальный ключ опору, как id
или email
.
The keyExtractor
возвращается к использованию index
по умолчанию. Но предупреждение останется видимым.
пример :
объект, определенный как {key: doc.id, value: doc.data()}
смогите быть использовано в экстракторе как:
keyExtractor={(item, index) => item.key}
компонент Flatlist должен выглядеть так:
<FlatList
style={{}}
data={this.state.FeedDataCollection}
keyExtractor={(item, index) => item.key}
renderItem={(rowData) =>this.RenderFeedCard(rowData)}
/>
@Sarantis Tofas имеет правильный ответ. Решил за меня! Две дополнительные заметки на основе комментариев:
- Если вы используете index, то обязательно используйте index.метод toString (), или вы получите другое предупреждение (Failed child context type - номер типа, предоставленный ожидаемой строке CellRenderer).
- FlatList будет работать с индексом по умолчанию, если у вас нет свойств ключа или keyExtractor, но он все равно выдаст предупреждение.