将 flux (fluxxor) 实例从 actions hash 传递到代理对象
pass an instance of flux (fluxxor) from actions hash to a proxy object
在我的 Fluxxor 应用程序中,我正在代理 ajax 调用来解析结果。我希望能够从该模块内分派响应有效负载。有人告诉我,我可以通过传入 flux 实例来做到这一点,然后我可以像这样发送:
flux.dispatcher.dispatch({type: SomeActionType, payload: somePayload});
我的actions.js文件:
/**
*actions.js
*/
var api = require('./api');
var constants = require('./constants');
actions = {
someAction() {
/// I want to dispatch some messages from inside the api module
api.get('hello');
// instead of doing it here
this.dispatch(SomeActionType, somePayload);
}
}
module.exports = actions;
我不确定如何将 flux 实例传递给 api 模块,而不是将它传递给每个感觉不正确的请求的 "get" 方法调用。
如何将通量实例放入 api 模块?
更新:
我刚刚意识到我在 node_modules 中有通量库。我可以在我的 api 模块中只需要助焊剂吗?
var flux = require('flux')
那么我可以访问 Dispatcher.dispatch.. 或者这是否违反了 fluxxor 的精神?
一个常见的习惯用法是在第三方模块中发出请求,但在动作创建者中调度动作。这使您的网络 API(发出 Ajax 请求)和特定于商店的通知(由 flux 使用)清晰地分开,并且更易于测试。
actions = {
someAction() {
api.get('hello')
.then((resp) => {
// success case
this.dispatch(SomeActionType, somePayload);
}, (err) => {
// failure case
this.dispatch(SomeActionType, somePayload);
});
}
}
api = {
get(param) {
return whateverAjax(param);
}
}
但是,如果您真的想从 API 触发操作,您可以按顺序创建和连接您的依赖项,然后传递它们。 (这也有助于测试,因为您可以在测试中传入模拟实例。)
// api.js
module.exports = (flux) => {
return {
get(param) {
whateverAjax(param).then((resp) => flux.dispatcher.dispatch(...));
}
}
}
// actions.js
module.exports = (api) => {
someAction() {
api.get('hello');
}
}
// whever you init your Fluxxor.Flux object...
var api = require("./api");
var actions = require("./actions");
var flux = new Fluxxor.Flux(stores); // no actions to start
api = api(flux);
actions = actions(api);
flux.addActions(actions);
补充说明:您在问题末尾提到的 flux
库是 Facebook's Flux library,与 Fluxxor 没有任何关系。
在我的 Fluxxor 应用程序中,我正在代理 ajax 调用来解析结果。我希望能够从该模块内分派响应有效负载。有人告诉我,我可以通过传入 flux 实例来做到这一点,然后我可以像这样发送:
flux.dispatcher.dispatch({type: SomeActionType, payload: somePayload});
我的actions.js文件:
/**
*actions.js
*/
var api = require('./api');
var constants = require('./constants');
actions = {
someAction() {
/// I want to dispatch some messages from inside the api module
api.get('hello');
// instead of doing it here
this.dispatch(SomeActionType, somePayload);
}
}
module.exports = actions;
我不确定如何将 flux 实例传递给 api 模块,而不是将它传递给每个感觉不正确的请求的 "get" 方法调用。
如何将通量实例放入 api 模块?
更新:
我刚刚意识到我在 node_modules 中有通量库。我可以在我的 api 模块中只需要助焊剂吗?
var flux = require('flux')
那么我可以访问 Dispatcher.dispatch.. 或者这是否违反了 fluxxor 的精神?
一个常见的习惯用法是在第三方模块中发出请求,但在动作创建者中调度动作。这使您的网络 API(发出 Ajax 请求)和特定于商店的通知(由 flux 使用)清晰地分开,并且更易于测试。
actions = {
someAction() {
api.get('hello')
.then((resp) => {
// success case
this.dispatch(SomeActionType, somePayload);
}, (err) => {
// failure case
this.dispatch(SomeActionType, somePayload);
});
}
}
api = {
get(param) {
return whateverAjax(param);
}
}
但是,如果您真的想从 API 触发操作,您可以按顺序创建和连接您的依赖项,然后传递它们。 (这也有助于测试,因为您可以在测试中传入模拟实例。)
// api.js
module.exports = (flux) => {
return {
get(param) {
whateverAjax(param).then((resp) => flux.dispatcher.dispatch(...));
}
}
}
// actions.js
module.exports = (api) => {
someAction() {
api.get('hello');
}
}
// whever you init your Fluxxor.Flux object...
var api = require("./api");
var actions = require("./actions");
var flux = new Fluxxor.Flux(stores); // no actions to start
api = api(flux);
actions = actions(api);
flux.addActions(actions);
补充说明:您在问题末尾提到的 flux
库是 Facebook's Flux library,与 Fluxxor 没有任何关系。