我已经开始学习Facebook的Flux架构。我正在尝试制作一个简单的登录屏幕。我遵循了磁通聊天示例应用程序来创建屏幕。我在ServerActionCreator和WebAPIUtils之间存在循环依赖的问题。请参见下面的代码。
ServerActionCreator.js
var AppDispatcher = require('../dispatcher/AppDispatcher');
var Constants = require('../constants/Constants');
var WebAPIUtils = require('../utils/WebAPIUtils');
var ActionTypes = Constants.ActionTypes;
module.exports = {
receiveLoginStatus: function(status){
AppDispatcher.handleServerAction({
type: ActionTypes.RECEIVE_LOGIN_STATUS,
status: status
});
},
loginSubmit: function(data){
WebAPIUtils.login(data);
}
}
WebAPIUtils.js
var ServerActionCreator = require('../actions/ServerActionCreator');
module.exports = {
login: function (data) {
//Mock server API call
var status = JSON.parse('{"status":"success"}');
ServerActionCreator.receiveLoginStatus(status);
}
};
如您所见,ServerActionCreator依赖于WebAPIUtils,而WebAPIUtils依赖于ServerActionCreator。
我认为,由于循环依赖性,WebAPIUtils变成一个空对象,并且在调用ServerActionCreator中的loginSubmit函数时出现“未定义不是函数”错误。屏幕截图如下。
如何处理这种情况?还是有其他方法吗?任何帮助深表感谢。
每当模块之间有循环依赖关系时,常见的解决方案是组合模块或创建第三个实体,这将破坏周期。
就您而言,我认为您可以转到loginSubmit
其他动作创建者模块。无论如何,这实际上是用户操作,而不是服务器操作。因此,也许loginSubmit
可以UserActionCreators.js
与许多其他用户操作创建者方法一起使用。
解决您的问题(通常是循环依赖项)的另一种方法是使您的方法更纯净,删除依赖项,而是将依赖项作为参数传递。因此,WebAPIUtils.login()
可以采用第二个参数,即成功回调。从而:
WebAPIUtils.login(data, ServerActionCreator.receiveLoginStatus)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句