如何清理Redux状态?

13
作为一个Redux的初学者,考虑到(一个相对较大的)应用程序的想法,我想象一个类似于以下代码的根reducer:

作为 Redux 初学者,考虑到(相对较大的)应用程序的情况,我会设想一个类似如下的根 reducer:

const rootReducer = combineReducers({ accounting, crm, sales })

即使用户只使用应用程序的一部分,该情况下应用程序状态仍将包含会计、客户关系管理和销售等内容。这可能是有利的,例如在会计和客户关系管理之间来回切换时用作缓存,但您可能不希望保留曾经打开过的所有视图的所有数据,也就是完整的可能状态树没有进行任何修剪,在应用程序中永久保存,甚至在加载时将整个树初始化为其初始状态。

是否存在解决此问题的成语、模式或库,还是我遗漏了什么?

作为部分解决方案,我想象可以重置某些部分的状态到其初始状态,当从应用程序的某些部分导航离开时给出一些声明性规则,例如:

  • <Accounting/> 接收到 componentWillUnmount 时,通过类似于 ACCOUNTING_LEAVING 的操作间接设置 accounting = {}
  • <MailEditor/> 接收到 componentWillUnmount 时,删除/设置 crm.mail = {}

我还没有看到任何清理状态的示例。许多“列表 + 详细视图”示例存储状态,例如 { list: [...], detail: {...} },但当切换到详细视图时,列表既不被清空、也不为空值、也不被删除。这很好,当我可能在几分钟后返回到列表视图时,但是如果使用一个9到5的应用程序而没有释放数据,则不行。

1个回答

8
一些相关想法:
  • 除非您预计将缓存几十或几百兆字节的数据到您的存储中,否则您可能会过早地担心这个问题。编写应用程序、基准测试,然后进行优化。
  • 调度动作以清除存储中的部分内容是完全有效和合理的。
  • 我的Redux附加组件生态系统目录可能列出了一些有用的库。特别是,组件状态Reducer页面指向一些库,可以动态添加和删除存储中的reducer,并重置状态。
  • 您还可能对我收集的高质量React和Redux教程感兴趣。

总的来说,如何组织您的状态、何时更新它以及使用什么更新它都取决于您。Redux只是提供了一个更新过程的模式和规则。


另一个有用的列表,几乎立即引导我去了react-ui,它似乎以类似的方式处理删除状态(在componentWillUnmount上); 我将调查一些库,找到(或添加...)适合我的用例之一。组件化方法来管理reducers和state似乎有很多不同的解决方案(至少有许多关于什么应该是状态的意见存在)。 - Thomas Luzat
3
等等,你是在告诉我不同的开发者有不同的做事想法?我感到震惊,真的! :) - markerikson
我正在调查Redux,但是非常困惑。在一个大型的、多视图的应用程序中,似乎逻辑上你通常不希望状态在用户离开“页面”后在浏览器中持久存在。将状态存储在组件中意味着您不必担心这个问题——状态随组件一起销毁——但是将其放入Redux存储中似乎需要显式地管理其生命周期,这会导致显著的开销。这让我非常倾向于使用基于组件的状态管理方法,而远离Redux。我错过了什么吗? - Dan King
值得注意的是,这种情况并不局限于 Redux,而适用于任何存储数据在组件树之外的情况。这包括 Redux store、MobX stores、Backbone collections、Angular services 或一些全局变量。 - markerikson
1
@markerikson自去年以来有什么新消息吗?有没有任何库可以为我们处理这个问题? - whatamidoingwithmylife
显示剩余2条评论

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