Ich habe versucht, Flatlist, aber es hat ein bisschen Leistungsprobleme in Android.Performance-Problem von FlatList in reagieren nativen
Während ich scrolle, wird die Liste geladen. Aber danach zeigt es leer, während es nach oben scrollt.
Nachdem das Ende des Bildschirms erreicht wurde, hält es eine Weile an und lädt dann die Daten. Warum zeigt Loader (Aktivitätsanzeige) nicht unten an? Warum funktioniert onEndReached und onEndReachedThreshold nicht?
Plz haben einen Blick auf das Video here
Mein Code:
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
FlatList,
ActivityIndicator,
} from 'react-native';
import { List, ListItem, SearchBar } from "react-native-elements";
export default class FlatListExample extends Component
{
constructor(props) {
super(props);
this.state = {
loading: false,
data: [],
page: 1,
seed: 1,
error: null,
refreshing: false,
};
}
componentDidMount() {
this.makeRemoteRequest();
}
makeRemoteRequest =() => {
const { page, seed } = this.state;
const url = `https://randomuser.me/api/?seed=${seed}&page=${page}&results=20`;
console.log('url', url);
this.setState({ loading: true });
setTimeout(()=>{
fetch(url)
.then(res => res.json())
.then(res => {
this.setState({
data: [...this.state.data, ...res.results],
error: res.error || null,
loading: false,
refreshing: false
});
})
.catch(error => {
this.setState({ error, loading: false });
});
},0);
};
renderFooter =() => {
if (!this.state.loading) return null;
return (
<View
style={{
paddingVertical: 20,
borderTopWidth: 1,
borderColor: "#CED0CE"
}}
>
<ActivityIndicator animating size="large" />
</View>
);
};
handleLoadMore =() =>{
this.setState({
page:this.state.page + 1,
},()=>{
this.makeRemoteRequest();
})
}
render() {
return (
<FlatList
data={this.state.data}
renderItem={({ item }) => (
<ListItem
roundAvatar
title={`${item.name.first} ${item.name.last}`}
subtitle={item.email}
avatar={{ uri: item.picture.thumbnail }}
/>
)}
keyExtractor={item => item.email}
ListFooterComponent={this.renderFooter}
onEndReached={this.handleLoadMore}
onEndReachedThreshold={50}
/>
);
}
}
AppRegistry.registerComponent('FlatListExample',() => FlatListExample);
Danke sooper. Ich habe die neueste Version - 'reactive-native: 0.44.0'. initialNumToRender löst das leere Problem. Aber ich habe noch ein Problem. Wenn die Bildlaufleiste das Ende des Bildschirms erreicht, dauert es ein wenig, die Daten zu laden. Unendlich Scroll funktioniert nicht gut. Irgendwann wird ein Loader gesehen, aber es passiert nicht die meiste Zeit. onEndReached und onEndReachedThreshold funktionieren nicht gut. https://youtu.be/rTw935FURQY –
Vielleicht möchten Sie die Probleme auf dem React-Navigation-Projekt überprüfen und sehen, ob jemand anderes das gleiche erlebt – sooper
0.44.1 ist jetzt verfügbar und enthält [dieses Update] (https: //github.com/facebook/react-native/commit/22a4205bdd63d60c7d7290693aaccfe47e84ebb3) – sooper