#reactjs #react-native #react-native-flatlist
#reactjs #react-native #react-native-плоский список
Вопрос:
У меня есть состояние 250 объектов, которые я пытаюсь загрузить в режиме прокрутки с изображением для каждого. Я использую react-native-lazyload, и это работает примерно для первых 75 изображений, затем прокрутка начинает замедляться до остановки, почти в одном и том же месте каждый раз.
Есть ли другой способ, которым я могу загрузить эти изображения? Кажется, что Flatlist был бы лучшим вариантом, чем Scrollview, но у меня нет функции, которую я мог бы вызвать onEndReach
Комментарии:
1. Где изображения хранятся на устройстве или в Интернете?
2. Я предпочитаю просмотр списка переработчиков . Хотя он не так прост в использовании, как FlatList, но выполняет свою работу довольно хорошо
3. @Andrew в Интернете
4. Рассматривали ли вы возможность использования
react-native-fast-image
?5. @Andrew Я пытался его использовать, но столкнулся с «Нарушением инварианта: requireNativeComponent: «FastImageView» не был найден в UIManager». Я использую crna 2.0.2. Я не уверен, смогу ли я использовать это без извлечения.
Ответ №1:
Я нашел действительно хорошую статью об улучшении производительности плоских списков здесь. В итоге я использовал плоский список с этими настройками:
<FlatList
containerContentStyle={styles.container}
data={countries}
renderItem={({ item }) => (
<View style={styles.results}>
<Results
{...this.props}
country={item}
handleUpdate={this.handleUpdate}
pendingCountry={pendingCountry}
/>
</View>
)}
keyExtractor={item => item.alpha2code}
ListHeaderComponent={() => this.renderHeader()}
// Performance settings
removeClippedSubviews={true} // Unmount components when outside of window
initialNumToRender={2} // Reduce initial render amount
maxToRenderPerBatch={1} // Reduce number in each render batch
updateCellsBatchingPeriod={100} // Increase time between renders
windowSize={7} // Reduce the window size
/>
Теперь я могу прокручивать весь свой список из 250 изображений в разумном темпе без проблем. Когда я начинаю прокручивать снизу вверх, экран становится немного дерганым, но это лучшее решение, с которым я когда-либо работал.
Комментарии:
1. Я думаю, что вторым ‘maxToRenderPerBatch’ должно быть ‘updateCellsBatchingPeriod’. В остальном отличный ответ. Спасибо!