在React/Redux应用程序中放置非UI逻辑应该放在哪里?

3
我正在编写一个React/Redux应用程序,其中有一个Job对象,会不时地触发事件。在这些事件中,用户需要做出反应。我可以轻松地编写显示这样的工作或事件的React组件,但是不知道在以下情况下将逻辑放在哪里:
1. 用户不在Job页面上 2. 发生事件 3. 我想弹出通知
当然,一旦我获得了访问存储的权限,我也可以创建通知。
以下是我的问题:
1. 我应该在不渲染任何内容的React容器中处理这样的逻辑吗? 2. 或者在加载Job数据时使用原始JS进行处理? 3. 或者在存储数据时在reducer中处理它?(可能不推荐)
我对第二个选项的问题在于,我不知道如何从完全临时的代码中访问redux store,因为我的store不是全局对象。
你有什么建议?

假设您正在异步加载数据,您可以触发一个SHOW_NOTIFICATION动作或类似的操作吗?或者,您可以在创建存储时导出它,并在需要订阅更改的任何地方导入它。 - Lee
1
如果不是用户,那么什么会触发作业事件?Web套接字?工作线程?某种计时器? - azium
我会在你的根组件下面放置一个名为Notifications的组件,该组件监听此类事件并在需要时显示通知。 - Fez Vrasta
@azium,工作事件是定时的,并且时间与工作数据一起接收,简单的setTimeout就可以解决问题,只是我不知道在哪里放置它。 - Akasha
1个回答

3

一般来说,需要访问store的代码(无论是分派还是接收状态更新)可以放在中间件或连接的组件中。如果您特别想要响应通过的操作,则需要使用中间件。

几周前,我在聊天讨论中编写了一个示例计时器中间件。 我将其作为示例粘贴到此处:https://gist.github.com/markerikson/ca96a82d6fdb29388aca4052a9455431 。它说明了在后台异步执行某些操作的想法。

您还可以查看我的Redux插件目录中的中间件列表:https://github.com/markerikson/redux-ecosystem-links/blob/master/middleware.md。其中有许多执行后台逻辑的示例。

最后,https://github.com/yelouafi/redux-saga(它本身就是一个中间件)是一个相当常用的库,用于执行类似于后台逻辑的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接