Ich bin neu zu reactjs, ich möchte Daten im Server abrufen, so dass es Seite mit Daten an den Client senden wird.React fetch Daten im Server vor dem Rendern
Es ist OK, wenn die Funktion getDefaultProps Dummy-Daten wie folgt zurückgibt {data: {books: [{..}, {..}]}}.
Allerdings nicht mit Code unten arbeiten. Der Code ausführen in dieser Reihenfolge mit der Fehlermeldung "Can not Eigenschaft 'Bücher' undefinierter lesen"
- getDefaultProps
- Rückkehr
- holen
- {Daten: {Bücher: [{..}, { ..}]}}
Allerdings erwarte ich, dass der Code sollte in dieser Reihenfolge laufen
- getDefaultProps
- holen
- {Daten: {Bücher: [{..}, {..}]}}
- Rückkehr
Jede Idee?
statics: {
fetchData: function(callback) {
var me = this;
superagent.get('http://localhost:3100/api/books')
.accept('json')
.end(function(err, res){
if (err) throw err;
var data = {data: {books: res.body} }
console.log('fetch');
callback(data);
});
}
getDefaultProps: function() {
console.log('getDefaultProps');
var me = this;
me.data = '';
this.fetchData(function(data){
console.log('callback');
console.log(data);
me.data = data;
});
console.log('return');
return me.data;
},
render: function() {
console.log('render book-list');
return (
<div>
<ul>
{
this.props.data.books.map(function(book) {
return <li key={book.name}>{book.name}</li>
})
}
</ul>
</div>
);
}
em ... aber ich weiß, dass die Daten holen und bereit sein können, bevor machen. Ihr Beispiel wird zweimal gerendert. Zuerst rendern (mit leeren Requisiten)> Daten abrufen und setState> erneut mit Status rendern. Korrigieren Sie mich, wenn ich falsch liege – fingercross
Sie haben Recht, die Komponente wird zweimal rendern. Ajax-Aufrufe auszuführen ist asynchron, was das Problem mit dem ursprünglichen Code war. Die einzige Methode, mit der Sie die Daten abrufen, bevor der Rendervorgang ausgeführt wird, besteht darin, dass Sie über eine übergeordnete Komponente verfügen, die für das Abrufen von Daten und das Mounten von 'BookList' zuständig ist. Sogar in diesem Fall müssen Sie den Status der Komponente aktualisieren, die den Rendervorgang zweimal aufruft. – hkal