2015-06-22 13 views
6

ich meine Komponente habe:React.js - saubere Art und Weise Laden/leere Zustände zu unterscheiden in Render

getInitialState() { 
    return { 
     items: [] 
    }; 
}, 

componentDidMount() { 
    // make remote call to fetch `items` 
    this.setState({ 
     items: itemsFromServer 
    }) 
}, 

render(){ 
    if(!this.state.items.length){ 
     // show empty state 
    } 
    // output items 
} 

Extrem gekünstelt/Sandbox, aber dies ist die allgemeine Idee. Wenn Sie diese Komponente zum ersten Mal laden, wird der HTML-Status "Leer" angezeigt, da der Server noch keine Daten zurückgegeben hat.

Hat jemand einen Ansatz/einen React Way ™, um zu prüfen, ob tatsächlich Daten vorhanden sind oder ein Ladezustand angezeigt wird?

+0

Der beste Weg, damit umzugehen, ist, Ihre App isomorph zu machen, so dass der HTML-Code vollständig auf der Seite geladen ist und sich intelligent anmeldet. Es ist definitiv nicht der einfachste Weg, aber das würde Ihre Seite mit einem Lade-Spinner verdecken und es mit etwas JS entfernen, sobald das DOM fertig ist. –

Antwort

6

Ich habe gerade ein leeres span-Element gerendert, aber Sie könnten genauso einfach einen CSS-Spinner rendern, der anzeigt, dass er geladen wird.

if(!this.state.items.length){ 
    return(<div class="spinner-loader">Loading…</div>); 
} 

http://www.css-spinners.com/

Sie auch berücksichtigen sollten, was ohne Ergebnisse, wenn Ihre Antwort geschieht zurückkommt. Ich würde (this.state.items === null) verwenden, um anzugeben, dass Sie auf Ergebnisse und ein leeres Array/eine leere Sammlung (! This.state.items.length) warten, um anzuzeigen, dass keine Ergebnisse zurückgegeben wurden.

+0

Wollten Sie 'this.state.items.length' verwenden? 'this.state' ist ein ** Objekt ** und hat in diesem Fall keine 'length'-Eigenschaft. –

+0

Danke, das habe ich vermisst. Aktualisierte Antwort –

Verwandte Themen