My Api - это простой старый объект javascript (POJO), подобный этому. Это в ES6, но вы должны получить идею:
import request from 'superagent';
// Other helpers functions and setup
let handle = (err) => {
// error handling stuff
};
export default {
create(user, cb) {
return request
.post(server + '/api/users/new')
.send(user)
.on('error', (err) => {
handle(err);
cb(err);
})
.end(cb);
},
login(user, cb) {
// Post some more stuff
}
};
Тогда, я называю это в моем магазине, как так:
import Reflux from 'reflux';
import UserActions from '../actions/UserActions';
import Api from '../api/UserApi';
const UserStore = Reflux.createStore({
listenables: [UserActions],
getInitialState() {
// insert stuff
},
onCreate(user) {
Api.create(user, (err, res) => {
if (err) {
console.log(err);
} else {
// Do something with res
// this is for JSON, your API might be different
let user = JSON.parse(res.text);
this.update(user);
}
})
},
onLogin(user) {
// login stuff
},
// More methods
update(user) {
this.currentUser = user;
this.trigger(user);
}
});
Я не обновлять мой магазин и this.trigger()
до возвращения апи вызова.
Разумная идея может быть оптимистически обновление:
// inside the todo store
onCreate(todo) {
Api.create(todo);
this.update([todos].concat(this.todos));
},
update(todos) {
this.todos = todos;
this.trigger(todos);
}
Очевидно, что это один из способов сделать это, но это, конечно, не единственный способ.
Но основная идея заключается в том, что в магазине используется API.
API-интерфейс не является частью потока данных:
Action-> магазин-> Component-> действий и т.д.