Flux体系结构循环依赖

Ashok Kumar M

我已经开始学习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函数时出现“未定义不是函数”错误。屏幕截图如下。

在此处输入图片说明

如何处理这种情况?还是有其他方法吗?任何帮助深表感谢。

fisherwebdev

每当模块之间有循环依赖关系时,常见的解决方案是组合模块或创建第三个实体,这将破坏周期。

就您而言,我认为您可以转到loginSubmit其他动作创建者模块。无论如何,这实际上是用户操作,而不是服务器操作。因此,也许loginSubmit可以UserActionCreators.js与许多其他用户操作创建者方法一起使用。

解决您的问题(通常是循环依赖项)的另一种方法是使您的方法更纯净,删除依赖项,而是将依赖项作为参数传递。因此,WebAPIUtils.login()可以采用第二个参数,即成功回调。从而:

WebAPIUtils.login(data, ServerActionCreator.receiveLoginStatus)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章