从Sagas中导入的API方法调度存储操作会导致依赖周期

时间:2019-08-23 20:02:39

标签: redux redux-saga

我有一个具有基于socket.io的API方法的React应用程序。 文件webSocket.js处理套接字连接,以及诸如发送和获取数据之类的基本方法,这些方法已在我的所有应用程序中使用。

我有几个Redux存储属性,必须在各种套接字事件期间更改这些属性。为此,我将Redux存储从store.js导入了webSocket.js,并使用store.dispatch()触发了相应的操作。

在我开始在项目中实现redux-saga之前,该解决方案工作良好。 在我的基本传奇中,我需要调用API方法,该方法依赖于send中的webSocket.js方法。由于传奇故事是通过store.js中间件导入到redux-saga中的,而store.js是通过webSocket.js导入的,所以我收到Dependency cycle的Linter错误,即使我只导入特定的方法。

这不是在破坏我的应用程序,但我想避免这种漏洞,让您安心。 我在Redux或Redux-Saga文档中找不到任何导致我案例的线索。 我是Redux的新手,所以也许我缺少一些基本的知识? 如果是这样,哪种方案适合我的情况?

1 个答案:

答案 0 :(得分:1)

一种选择是将websocket函数分解为两个文件-一个用于发送websocket消息,另一个用于处理传入消息。消息发送文件不应依赖于存储,因为它不需要调度操作,然后sagas可以从该文件中导入而无需依赖周期。收入消息处理文件将通过商店调度事件,而不依赖于sagas。根据您设置套接字的方式,您需要第三个文件来进行发送方和处理程序文件所依赖的连接管理。

总的来说,您正在寻找能够打破依赖关系周期的关注点分离,并且我认为分离消息发送和处理将是实现这种分离的好地方。