ich nicht in der Lage gewesen, so weit so zu lösen, hoffe ich, von hier jemanden, der mir :)Wie fetch() innerhalb von renderItem auf FlatList aufrufen? wie folgt
Die Situation ist helfen kann:
Ich lade eine Liste von Benutzern aus einer Abteilung Verwenden einer API, die es als JSON zurückgibt (das funktioniert).
Für jeden Benutzer in der JSON-Datei muss ich eine andere JSON-Datei mit Sensordaten abrufen (das funktioniert nicht).
Ich bin in der Tat der Lage, die JSON-Daten aus der getStatus() Funktion bekommen, aber es ist nicht richtig. Wenn die FlatList gerendert wird, wurden die Daten zwar noch nicht abgerufen, aber beim Aufrufen des Aufrufs fetchUsers() werden die Sensordaten angezeigt, sie zeigen jedoch dieselben Sensordaten für alle Benutzer und nicht ihre eigenen spezifischen Sensordaten an . Ich bin nicht Bilder erlaubt, um zu sehen, was zurückgegeben ...
erhält hier hochladen,
Im Moment habe ich gemacht es ausspucken, was immer JSON es in einem Textelement, um aber ich habe eine gemacht Album auf Imgur die Bilder der Anwendung enthält, um das Problem zu erklären: https://imgur.com/a/5XLpR
export default class SensorData extends Component {
constructor(props) {
super(props);
this.stats = null;
this.state = {
isLoading: true,
error: false,
userDataSource: [],
refreshing: false,
time: 30,
navigation: props.navigation,
};
}
componentDidMount() {
this.fetchUsers();
}
fetchUsers(){
return fetch('http://url-to-the-json/json/patients.json')
.then((response) => response.json())
.then((response) => {
this.setState({
isLoading: false,
error: false,
userDataSource: response,
refreshing: false,
time: 30,
}, function() {
});
})
.catch((error) => {
this.setState({
isLoading: false,
error: true
})
});
}
getStatus(patientId) {
fetch("http://url-to-the-json/json/status/" + patientId + ".json")
.then((response) => response.json())
.then((responseJson) => {
this.stats = responseJson;
})
.catch((error) => {
Alert.alert("Error");
});
return this.stats;
};
renderItem(item, index) {
var x = index % 2 === 0;
status = this.getStatus(item.patientId);
return (
<View style={x ? styles.rowEven : styles.rowOdd}>
<TouchableOpacity style={styles.rowName} onPress={this.handlePress.bind(this, item)}>
<Text style={styles.rowNameText}>{item.firstname} {item.lastname}</Text>
</TouchableOpacity>
<Text>{JSON.stringify(status)}</Text>
</View>
)
}
render() {
return (
<View>
<View style={styles.reloadTimer}>
<Text style={styles.timerText}>Reloading in {this.state.time} seconds.</Text>
</View>
<View style={styles.listView}>
<FlatList
data={this.state.userDataSource}
renderItem={({ item, index }) => this.renderItem(item, index)}
keyExtractor={item => item.patientId}
refreshing={this.state.refreshing}
onRefresh={this.handleRefresh}
ItemSeparatorComponent={this.renderSeparator}
/>
</View>
</View>
);
}
}
die Variable Status ist die in Frage.
Ich hoffe, ich habe die Frage verständlich formuliert.
Die Benutzer JSON-Datei sieht wie folgt aus:
{
"patientId": "ec276ca9-f9ab-429b-b34e-23fcf448d714",
"firstname": "Julie",
"lastname": "Nielsen",
"birthDate": "1930-01-01T00:00:00Z",
"departmentId": "709f59ae-67fe-447c-bed3-7b5912703861",
"patientNumber": null,
"entryDate": null,
"dischargeDate": null,
"editedOn": null,
"editedBy": null
}
Die Sensordaten JSON-Datei wie folgt aussieht:
{
"status": {
"in_bed": false,
"in_room": true,
"clean_diaper": true
}
}
haben Sie versucht, async-erwarten in renderItem-Funktion zu verwenden? Andernfalls wird es gerendert, ohne auf das Ergebnis zu warten –