Избегайте анонимной функции, которая, вероятно, является основной причиной проблемы сбоя, она будет создаваться заново при каждом рендеринге вашего элемента. Извлечение всех анонимных функций .
Кроме того, обработчик события memoize также поможет минимизировать ненужный повторный рендеринг, который раздувал вашу память.Вы можете использовать библиотеку lodash для достижения этой цели.
yarn add lodash
Вот эффективный способ визуализации FlatList.
import { memoize, curry } from "lodash/fp";
class YourComponent {
assignRef = (c) => {
this.flatList = c;
}
onTweetPress = memoize(curry((id, _ev) => {
this.goToDetail(item.id)
}));
onImagePress = memoize(curry((id, _ev) => {
this.toggleModal(id)
}));
onImagePress = memoize(curry((id, _ev) => {
this.toggleModal(id)
}));
onCommentPress = memoize(curry((id, _ev) => {
this.showComments(id)
}));
renderItem = ({ item }) => (
<TweetItem
reloadComponent={this.reload}
name={this.state.name}
onPress={this.onTweetPress(item.id)}
onImagePress={this.onImagePress(item.id)}
onCommentPress={this.onCommentPress(item.id)}
tweet={item}
/>
)
keyExtractor = (item, index) => (index.toString())
render() {
return (
<FlatList
removeClippedSubviews={true}
maxToRenderPerBatch={15}
initialNumToRender={5}
refreshing={this.state.refresh}
bounces={false}
onRefresh={this.refreshAllTweets}
data={tweets}
ref={this.assignRef}
keyExtractor={this.keyExtractor}
onEndReached={this.endReached}
onEndReachedThreshold={0.1}
renderItem={this.renderItem}
/>
);
}
}