我有一个具有基于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的新手,所以也许我缺少一些基本的知识? 如果是这样,哪种方案适合我的情况?
答案 0 :(得分:1)
一种选择是将websocket函数分解为两个文件-一个用于发送websocket消息,另一个用于处理传入消息。消息发送文件不应依赖于存储,因为它不需要调度操作,然后sagas可以从该文件中导入而无需依赖周期。收入消息处理文件将通过商店调度事件,而不依赖于sagas。根据您设置套接字的方式,您需要第三个文件来进行发送方和处理程序文件所依赖的连接管理。
总的来说,您正在寻找能够打破依赖关系周期的关注点分离,并且我认为分离消息发送和处理将是实现这种分离的好地方。