Domanda sulla popolazione di dati del negozio in applicazioni di flusso isomorfico. (Sto usando reagire, alt, iso e il nodo, ma la teoria vale per altri esempi)JS isomorfo - solo lato client httpRequest
Ho un flusso di 'negozio' (http://alt.js.org/docs/stores/), che ha la necessità di ottenere i dati da un API:
getState() {
return {
data : makeHttpRequest(url)
}
}
e mentre l'utente naviga attraverso la SPA, ulteriori dati verranno caricati tramite richieste http.
Desidero che questa app sia isomorfa, in modo da poter eseguire il rendering delle app complete in html, incluso il lato del server di dati più recente e restituirlo all'utente per il caricamento iniziale della pagina.
react.renderToString() mi permette di rendere l'app come html, e posso seminare i dati utilizzando alt & iso come:
storeData = { "MyStore" : {"key" : "value"}}; // set data for store
alt.bootstrap(JSON.stringify(storeData || {})); // seed store with data
var content = React.renderToString(React.createElement(myApp)); // render react app to html
Il problema è che vedrò errori durante l'esecuzione lato server js come lo store vorrà fare una richiesta http che non sarà in grado di fare (come xmlhttprequest non esisterà nel nodo)
Qual è il modo migliore per risolvere questo problema?
L'unica soluzione che viene in mente è quello di avvolgere la HttpRequest dal negozio con:
var ExecutionEnvironment = require('react/lib/ExecutionEnvironment');
...
if (ExecutionEnvironment.canUseDOM) {
// make http request
} else {
// do nothing
}
un'idea migliore? Grazie in anticipo.
Aggiungi ulteriori informazioni per favore! E.g: esempi di codice, errori particolari associati alla domanda – Bwaxxlo
aggiunto snippet di codice e maggiori dettagli - fammi sapere se c'è qualcos'altro – theStonehill
Perché non utilizzare una richiesta di ottenere i dati invece di prendere in giro AJAX nel back-end? Il punto principale di AJAX è che non vuoi ricaricare la pagina sul front-end. Poiché stai eseguendo un rendering di backend, invia semplicemente una richiesta get/post alla risorsa, analizza i dati di conseguenza e esegui il rendering prima di inviarli al client. – Bwaxxlo