GetItemLayout в React-Native FlatList

Я пытаюсь использовать функцию scrollToIndex для реактивного плоского списка. То, что я ожидаю, будет представлением списка алфавита. Также используйте scrollToIndex, мне нужно установить свойство getItemLayout компонента flatlist. Я визуализировал элементы с тем же алфавитом, что и элемент в родительском плоском списке, и отображал элементы внутри дочерних плоских списков, поэтому высота элементов родительского плоского списка различается. Проблема в том, что если я даю поддержку getItemLayout, это дает мне ошибку, как показано ниже.

Нарушение инварианта: Нарушение инварианта: Нарушение инварианта: Нарушение инварианта: Не следует оценивать кадры, если предоставляется функция измерения показателей

<FlatList data = {this.cityList}
    renderItem = {this.renderCityGroup}
    style = {styles.cityList}
    keyExtractor = {(item, index) => item + index}
    getItemLayout = {(data, index) => {
        return {
            length: data.height,
            offset: data.total
        }
    }}
    ref = {ref => this.cityListRef = ref}
/>

Это мой текущий код.

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
4
0
6 744
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем случае это достаточно просто. Внутри data находятся ваши предметы. Итак, если вы не изменяли этот массив целенаправленно, чтобы он имел свойство height и total, это вообще не сработает.

Вдобавок к этому offset — это не общая высота всех элементов, а высота всех элементов в сумме что было раньше выданного элемента.

Пример:

Реагировать на собственные запросы, ему нужен элемент с индексом 3, а наши элементы имеют высоту 10, 20, 30 и 40.

Для третьего элемента offset вам нужно добавить «ноль», первый и второй, чтобы получить «начальную координату y» (или x зависит от направления списка). Для length просто укажите высоту вашего элемента, которая в нашем случае будет равна 40.

Ваш окончательный возвращаемый объект должен выглядеть примерно так.

return {
  index: index,
  /*
    You need to implement the two functions below so they actually return
    what I described above.
  */
  length: getItemHeight(index),
  offset: getItemOffset(index),
}

Если кому-то нужна помощь с реализацией, оставьте комментарий, и я могу дать вам подсказку :).

Хотя есть еще несколько подводных камней. Команда реагирования либо допустила ошибку, либо почему-то считает забавным (или может быть действительно полезным, я понятия не имею) иногда запрашивать элемент с индексом -1, которого, по крайней мере, у меня нет. Для этого особого случая я добавляю этот код перед кодом, который я разместил выше:

// New, negative index preventing code
if (index === -1) return { index, length: 0, offset: 0 };
// Old code
return {
  index: index,
  length: getItemHeight(index),
  offset: getItemOffset(index),
}

ПРИМЕЧАНИЕ: Если все ваши элементы имеют одинаковую высоту, весь расчет будет на способ проще. Я был бы просто:

return {
  index,
  length: itemHeight, // itemHeight is a placeholder for your amount
  offset: index * itemHeight,
};

Другие вопросы по теме

Как обрабатывать состояние элементов плоского списка в React-Native
Данные не отображаются в одном из двух плоских списков в одном компоненте
Как выделить элемент из плоского списка и показать параметр удаления, чтобы удалить этот элемент из списка при длительном нажатии на этот элемент?
React Native FlatList, потребляющий все касания (TucableWithoutFeedback onPress не вызывается)
React Native TypeError: undefined не является объектом (оценка '_ref.item')
ReactJS Image или другой аналогичный компонент для повторного использования растрового изображения
Используя keyExtractor, все еще получаю предупреждение о том, что у моих элементов нет ключей
React Native FlatList с настраиваемыми кнопками, как изменить цвет при нажатии?
Сохраните навигацию по параметрам, которая находится в плоском списке, и отобразите ее на другом экране
Почему в моем React-Native FlatList есть двойник с одним и тем же ключом?