2015-01-18 33 views
7

Qual è il modo corretto per inizializzare i dati (in modo asincrono) con RefluxJS? C'è qualcosa di simile alle risoluzioni di AngularJS, o l'implementazione di Flux non ha nulla a che fare con questo (il router dovrebbe gestire questa responsabilità)?Modo corretto per inizializzare i dati

risposta

10

Nel componente di livello superiore dell'applicazione, utilizzare il metodo comoponentWillMount (docs) per attivare un'azione che recupera i dati. Questo metodo verrà chiamato quando il componente è inizialmente sottoposto a rendering.

Ad esempio:

// Create an async action, that will request data using a promise 
// Using the recently released (v0.2.2) helpers for async actions 
var actions = Reflux.createActions({ 
    init: {asyncResult: true} 
}); 
actions.init.listenAndPromise(promiseToGetData); 

// Update the store when the init action's promise is completed 
var store = Reflux.createStore({ 
    listenables: actions, 
    onInitCompleted: function (data) { 
     // do stuff 
     this.trigger(data) 
    } 
}); 

var App = React.createClass({ 
    mixins: [Reflux.connect(store)], 
    componentWillMount: function() { 
     // When this component is loaded, fetch initial data 
     actions.init() 
    } 
}); 
+0

: Se io sto usando refluxjs con reagiscono-router, cosa succede se la promessa è stata respinta; Il montaggio è bloccato (tecnicamente, non succede niente) o viene gestito manualmente? – srph

+0

Il componente sarà ancora montato, la chiamata all'azione è attiva e dimenticata. Se la promessa viene rifiutata, il negozio riceverà comunque il risultato ed è possibile aggiungere un gestore 'onInitFailed'. Vedi https://github.com/spoike/refluxjs#asynchronous-actions per ulteriori informazioni sulle azioni asincrone. –

+0

Grazie. A proposito, ti riferisci a '' 'componentWillMount''' piuttosto che a' '' onComponentWillMount'''? – srph

-1

reflusso ha un'API per questo effettivamente.

La documentazione sono poveri a descriverla, ma Spoike (autore del reflusso) ha dato una risposta con un esempio di codice: Solo una domanda

https://stackoverflow.com/a/28984512/1775026

+0

Questa domanda riguardava il recupero dei dati in modo asincrono. Reflux imposta il metodo 'getInitialState' del negozio sui componenti React e non deve essere utilizzato per il recupero dei dati in modo asincrono. L'esempio nella risposta a cui ti sei collegato è per valori statici. Vedi un React [documentazione] ufficiale (https://facebook.github.io/react/tips/initial-ajax.html) per un esempio e http://stackoverflow.com/questions/26615307 –

Problemi correlati