Ключ React Native FlatList

#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 не всегда является лучшим вариантом!