我应该在哪里添加代码来运行Redux状态附带的副作用?

我正在使用Electron,React和Redux构建一个桌面应用程序。

此桌面应用程序的关键组件之一是将redux状态的某些组件与驱动器上的物理文件绑定在一起。该网站是用户是否可以访问某些数据的“主”副本。该应用程序将下载应具有的文件列表,然后跟踪已下载的文件。典型的工作流程是加载列表,然后单击“下载”,然后在下载项目后在应用程序中使用它。

当我更新项目的本地redux列表时,我还需要管理那些文件的状态。从redux存储中删除记录后,我需要删除关联的物理文件。

这使我处于一个奇怪的空间。编写更改本地文件结构的reducer真的很奇怪。更糟糕的是,因为我正在使用electron-redux保持多个进程同步-我正在主进程和渲染器窗口中运行一个完整的redux堆栈,并使用electron-redux使其共享状态。

我看的越多,感觉减速器完全是错误的选择。不利的一面是,此代码肯定需要基于 state 发生,这使redux成为执行此操作的正确位置。不确定这里的正确解决方案是什么-我在设计原则上相互矛盾,我不确定如何解决。

编辑:

这里的部分困难是化简并没有对状态进行简单的替换。在这种情况下,reducer会执行非常复杂的算法:

当前状态:

[
  {
    id: 1,serverState: 'red',localState: 'file'
  },{
    id: 2,serverState: 'green',localState: 'file-processed'
  }
]

服务器可能会发送(因此包含我的操作有效负载):

[
  {
    id: 2,serverState: 'purple',},{
    id: 3,serverState: 'blue',}
]

结果,我需要合并数据,所以我的状态为

[
  {
    id: 2,localState: 'file-processed'
  },localState: 'no-file'
  }
]

请注意,项#2的localState不变,但是serverState项被覆盖。项#1的本地文件需要从文件系统中删除,用户不再具有权限。

qduwcf1 回答:我应该在哪里添加代码来运行Redux状态附带的副作用?

除了更换商店以外,减速器不是发生副作用的正确位置。

有一些库可以处理与redux相关的副作用。例如,有redux-saga:https://redux-saga.js.org/

Redux-saga是Redux中间件,并且Sagas由与更新Redux存储相同的操作触发。

本文链接:https://www.f2er.com/3156000.html

大家都在问