gpt4 book ai didi

browserify - Flux 架构循环依赖

转载 作者:行者123 更新时间:2023-12-04 15:21:56 25 4
gpt4 key购买 nike

我已经开始学习 Facebook 的 Flux 架构。我正在尝试制作一个简单的登录屏幕。我关注了flux-chat示例应用程序来创建屏幕。我在 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 函数时出现“未定义不是函数”错误。截图如下。
enter image description here
如何处理这种情况?或者有没有其他方法?任何帮助深表感谢。

最佳答案

每当您在模块之间存在循环依赖关系时,一个常见的解决方案是组合模块或创建第三个实体来打破循环。

在你的情况下,我认为你可以移动 loginSubmit到不同的 Action 创建者模块。无论如何,它实际上是用户操作,而不是服务器操作。所以也许 loginSubmit可以进去UserActionCreators.js以及任意数量的其他用户操作创建器方法。

您的问题(以及一般的循环依赖项)的另一个解决方案是使您的方法更纯粹,删除依赖项,而不是将依赖项作为参数传递。所以WebAPIUtils.login()可以接受第二个参数,这将是成功回调。因此:

WebAPIUtils.login(data, ServerActionCreator.receiveLoginStatus)

关于browserify - Flux 架构循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com