Comment créer des appels d'API dans REACT et FLUX

Je suis nouveau de réagir et de flux et je vais avoir un moment difficile essayer de trouver comment charger des données à partir d'un serveur. Je suis en mesure de charger les mêmes données à partir d'un fichier local avec pas de problèmes.

Donc tout d'abord j'ai cette vue contrôleur (controller-view.js) qui passe de l'état initial à une vue (view.js)

controller-view.js

var viewBill = React.createClass({
getInitialState: function(){
    return {
        bill: BillStore.getAllBill()
    };
},
render: function(){
    return (
        <div>
            <SubscriptionDetails subscription={this.state.bill.statement} />
        </div>
    );
}
 });
 module.exports = viewBill;

view.js

var subscriptionsList = React.createClass({
propTypes: {
    subscription: React.PropTypes.array.isRequired
},
render: function(){

   return (
        <div >
            <h1>Statement</h1>
            From: {this.props.subscription.period.from} - To {this.props.subscription.period.to} <br />
            Due: {this.props.subscription.due}<br />
            Issued:{this.props.subscription.generated}
        </div>
    );
}
 });
 module.exports = subscriptionsList;

J'ai un fichier de scripts de chargement de la INITAL données de mon application. Donc, ce sont des données qui est pas appelé par l'action de l'utilisateur, mais appelée à partir de getInitialState dans le contrôleur de vue

InitialActions.js

var InitialiseActions = {
initApp: function(){
    Dispatcher.dispatch({
        actionType: ActionTypes.INITIALISE,
        initialData: {
            bill: BillApi.getBillLocal() //I switch to getBillServer for date from server
        }
    });
}
};
module.exports = InitialiseActions;

Et puis mes données API ressemble à ceci

api.js

var BillApi = {
getBillLocal: function() {
    return billed;
},
getBillServer: function() {
    return $.getJSON('https://theurl.com/stuff.json').then(function(data) {

        return data;
    });
}
};
module.exports = BillApi;

Et c'est le magasin
store.js

var _bill = [];
var BillStore = assign({}, EventEmitter.prototype, {
addChangeListener: function(callback) {
    this.on(CHANGE_EVENT, callback);
},
removeChangeListener: function(callback) {
    this.removeListener(CHANGE_EVENT, callback);
},
emitChange: function() {
    this.emit(CHANGE_EVENT);
},
getAllBill: function() {
    return _bill;
}
});

Dispatcher.register(function(action){
switch(action.actionType){
    case ActionTypes.INITIALISE:
        _bill = action.initialData.bill;
        BillStore.emitChange();
        break;
    default:
        //do nothing
}
});

module.exports = BillStore;

Donc, comme je l'ai mentionné plus tôt, lorsque je charge les données en local à l'aide de BillApi.getBillLocal() dans des actions tout fonctionne bien. Mais lorsque je change de BillApi.getBillServer (), je reçois le followind des erreurs dans la console...

Warning: Failed propType: Required prop `subscription` was not specified in     `subscriptionsList`. Check the render method of `viewBill`.
Uncaught TypeError: Cannot read property 'period' of undefined

J'ai également ajouté une console.journal(données) pour les BillApi.getBillServer() et je peux voir que les données renvoyées par le serveur. Mais il est affiché APRÈS - je obtenir les mises en garde dans la console, qui je crois peut-être la question. Quelqu'un peut-il donner quelques conseils ou m'aider à résoudre ce problème? Désolé pour ce long post.

Mise à JOUR

J'ai apporté quelques modifications à la api.js fichier (cliquez ici pour le changement et DOM erreurs plnkr.co/modifier/HoXszori3HUAwUOHzPLG ) comme il a été suggéré que le problème est dû à la façon dont je gère la promesse. Mais il semble toujours être le même problème comme vous pouvez le voir dans les DOM erreurs.

source d'informationauteur Jose the hose