У меня есть подозрение, что проблема в опоре renderItem
, а затем в методе renderOneMonthPerMonth()
.
Ссылаясь на документы FlatList :
Это PureComponent, что означает, что он не будет повторно визуализироваться, если реквизит остается мелко-равным. Убедитесь, что все, от чего зависит ваша функция renderItem, передается как реквизит (например, extraData), который не === после обновлений, иначе ваш пользовательский интерфейс может не обновляться при изменениях. Это включает в себя реквизит данных и состояние родительского компонента.
и
renderItem ({элемент: объект, индекс: число, разделители: {выделение: функция, выделение: функция, updateProps: функция (выбор: строка, новыеПроцессы: объект)}}) =>? React.Element
Наличие this.deriveMonthPerMonthDataFromProps()
может быть не Чистым (в зависимости от этой опоры, я не могу видеть это).
Попробуйте извлечь все данные и назначить const вне метода renderItem, который передается. В качестве альтернативы, если эти данные являются чистыми и не изменяются, вы можете пропустить этот шаг.
Следующие два, вероятно, суть проблемы: создайте функцию рендеринга, похожую на эту:
const renderItem = ({ item, index }) => {
return <DummyComponent item={item} index={index} /> // item and index are not necessarry just demonstrating
}
- Убедитесь, что у вас есть keyExtractor, возвращающий уникальный идентификатор. Иначе это приведет к ошибке, аналогичной вашей проблеме. Попробуйте приведенное ниже как проверку работоспособности
keyExtractor={(item, index) => index.toString()}
Если вышеприведенное не является проблемой, вам также необходимо убедиться, что ваш реквизит данных в вашем Flatlist представляет собой массив , а не Object или другую структуру данных, как объяснено в data раздел документации Flatlist.
Если ваши данные относятся к типу object и вы не полагаетесь на ключи для доступа к определенным частям данных другими методами, вы можете изменить исходные данные на массив объектов, например:
[
{ ...monthOneData },
{ ...monthTwoData },
{ ...monthThreeData }
]
Или, если вы хотите сохранить исходные данные как объект, вы можете преобразовать их в массив ключей, используя
Object.keys(this.state.data)
Тогда в вашем FlatList вы можете сделать что-то вроде этого:
<FlatList
data={Object.keys(this.state.data)}
renderItem={({item}) =>
<DummyComponent month={this.state.data[item].month} /> // item is now the key value of the objects (almost like a look up table)
// also not having curly braces implies an implicit return in this case
}
/>