Ich bin sehr neu mit React und ich versuche, die Daten vom Server mit fetch
API zu rufen.Fetch Daten mit React
Wenn ich will, eine Hilfsklasse machen, die Daten wie diese
import { Promise } from 'es6-promise';
import fetch from 'isomorphic-fetch';
let responseData = response => {
return response;
};
let getData = (dataURL, headers) => {
let result = {
data: [],
message: ''
};
if (dataURL === null || dataURL === undefined || dataURL === '') {
result.message = 'URL is not correct';
responseData(result);
}
fetch(dataURL, headers)
.then(response =>{
if (response.ok) {
response.json().then(data => {
result.data = data;
result.message = response.statusText;
responseData(result);
});
}else{
result.message = 'Network response was not ok.';
responseData(result);
}
})
.catch(err => console.log(err));
};
exports.responseData = responseData;
exports.getData = getData;
zu bekommen und immer dann, wenn die Daten verfügbar sind, werde ich das Reagieren fragen die Ansicht machen, während der Wartezeit, es wird ein Ladesymbol angezeigt.
Ich lege den Anruf innerhalb componentDidMout
, aber bis es ausgeführt wird, ist das Ergebnis immer undefined
.
componentDidMount() {
var self = this;
let result = util.getData('http://localhost:3001/menus');
const { dispatch } = this.props;
// dispatch(menuActions.fetchMenusIfNeeded());
if (result !== null && result !== undefined) {
if (this.isMounted()) {
this.setState({
items: result.data.results
});
}
}
}
In Angular, sobald die Daten verfügbar sind, wird es entsprechend aktualisiert werden, aber ich verstehe wirklich nicht, wie es in zu reagieren.
EDIT 1: die Hilfsklasse aktualisieren:
import { Promise } from 'es6-promise';
import fetch from 'isomorphic-fetch';
let getData = (dataURL, headers) => {
return fetch(dataURL, headers);
};
exports.getData = getData;
Es wird immer geben einen Promise
so kann ich Kette Handler für Daten in anderen Komponenten. Das einzige Problem, das ich benötige, um die Nachricht zu behandeln, ist das Lesen des Response
Objekts in meinen Komponenten.
In Reaktion Komponente:
componentWillMount() {
util.getData('http://localhost:3001/menus')
.then(response =>{
if (response.ok) {
response.json().then(data => {
console.log(data);
this.setState({
items: data.result
});
});
}
})
.catch(err => console.log(err));
}
Aber immer, wenn er die Daten empfangen werden, die render()
Funktion bereits beendet ist, sollte ich es zwingen, wieder zu aktualisieren?
Sie Rückkehr nichts von 'getData' Funktion, sondern auch dann, wenn Sie zurückkommen tun' result', das ist async so Sie werden 'result' nicht in' componentDidMount' sehen. –
Ich habe das Problem verstanden, aber wann immer ich ein "Versprechen" zurücksende, wie sollte ich React informieren, um die 'render()' Funktionen zu aktualisieren. –
Ein Artikel, der alle Fragen darüber beantwortet, wie, wann und wo man Daten in React abrufen kann: [Wie man Daten in React abruft] (https://www.robinwieruch.de/react-fetching-data/). Vielleicht hilft es den Leuten, etwas darüber zu erfahren, wenn sie über diese Frage stolpern. –