Плоский список вариантов использования getItemLayout

Почему мы используем getItemLayout в плоском списке, как это помогает улучшить производительность плоского списка. Проверьте документацию по реакции, но не нашли удовлетворительного ответа.

  getItemLayout={(data, index) => (
    {length: ITEM_HEIGHT, offset: ITEM_HEIGHT * index, index}
  )}

что здесь смещено, что оно делает?


person Rajat Gupta    schedule 08.02.2018    source источник


Ответы (1)


React Native FlatList оптимизирует производительность представления списка, отображая только строки, которые в данный момент видны на экране, и размонтируя строки, которые были прокручены.

Чтобы FlatList мог это сделать, ему необходимо знать общую высоту строк над видимой в данный момент областью просмотра, чтобы он мог правильно установить базовую позицию прокрутки ScrollView.

FlatList может добиться этого двумя способами. Либо,

  • он может рассчитать высоту строк после того, как строки были смонтированы, или
  • вы можете сказать, какой высоты вы ожидаете, что строки будут.

В первом случае ему необходимо полностью компоновать, визуализировать, монтировать и измерять предыдущие ряды, пока он не сможет вычислить положение следующих рядов.

В последнем случае он может заранее рассчитать позиции и избежать затрат на динамическое измерение.

Три аргумента обратного вызова getItemLayout:

  • length: Высота каждой отдельной строки. Они могут быть разной высоты, но высота должна быть статической. Оптимизация работает лучше всего, когда высота постоянна.
  • offset: Расстояние (в пикселях) текущей строки от верхней части FlatList. Самый простой способ вычислить это для строк постоянной высоты — height * index, что дает позицию сразу после предыдущей строки.
  • index: индекс текущей строки.

Если FlatList является горизонтальным, каждый столбец списка обрабатывается как строка списка, а ширина столбца совпадает с высотой строки.

person jevakallio    schedule 08.02.2018
comment
Если горизонтальная опора истинна, то в вашем ответе высота становится шириной элемента, а строка становится столбцом??? - person Rajat Gupta; 08.02.2018
comment
Правильный. Редактирование моего ответа, чтобы отразить это. - person jevakallio; 08.02.2018
comment
Если у меня есть ItemSepearator в моем FlatList, будет ли правильно использовать { length: ItemHeight, offset: (ItemHeight + SeparatorHeight) * index, index}? - person user2236165; 14.08.2018
comment
Должны ли мы включать поля, отступы элемента при использовании getItemLayout? - person Ashwin Mothilal; 24.09.2018
comment
@jevakallio Включает ли высота элемента отступы и поля? или должно смещение иметь те? - person incorelabs; 04.10.2018
comment
@AshwinMothilal Да, ВЫ ДОЛЖНЫ включать ItemSeparator, но не поля или отступы. - person Walter Monecke; 19.06.2019
comment
Но после установки реквизита getItemLayout он возвращается после загрузки какого-либо элемента. - person sejn; 18.11.2019