#javascript #reactjs #react-native
#javascript #reactjs #react-native
Вопрос:
У меня есть FlatList, который отображает пользовательский компонент «Card». Я передаю как keyExtractor эту функцию:
const keyExtractor = (item) => item.id;
И моя функция renderItem выглядит следующим образом:
const renderItem = ({item, index}) => <Card {...item} />
Мой вопрос: должен ли я передать ключ компоненту Card? Я имею в виду, должен ли я это делать
const renderItem = ({item, index}) => <Card key={item.id} {...item} />
чтобы избежать повторного отображения компонентов моего flatlist и повысить производительность моего списка? Я видел, как некоторые люди делали это… но я никогда этого не делал. Если ответ положительный, зачем нам keyExtractor, если у каждого отображаемого компонента есть ключ?
Конечно, если я передам ключ своему пользовательскому компоненту, я сделаю это при его реализации:
return <View key={props.key}>...</View>
Спасибо.
Ответ №1:
У вас должно быть уникальное свойство в ваших данных, и вы должны использовать его в качестве ключа. Нет необходимости передавать key
вашему Card
компоненту.
Если ваши данные выглядят примерно так:
data = [
{
id: 'a12f56e5',
name: 'me',
age: 24
}
// ...
];
затем вы можете использовать id
в качестве ключа.
Кроме того, пожалуйста, взгляните на это, чтобы улучшить производительность вашего FlatList
Комментарии:
1. Я выполнил все шаги, чтобы улучшить производительность моего FlatList, но всегда отставал на Android: C Кроме того, я перешел с FlatList на VirtualizedList, поскольку я реализую бесконечную прокрутку с разбиением на страницы. Вы когда-нибудь экспериментировали с чем-то подобным? (Мои элементы расширяют PureComponent, и я играл с windowSize={35}, maxToRenderPerBatch={14}, updateCellsBatchingPeriod ={50} )
2. Вы можете реализовать бесконечную прокрутку с помощью FlatList. Пожалуйста, учтите, что использование
PureComponent
не всегда является лучшим вариантом!