你如何清理Redux的状态?

Tho*_*zat 8 state reducers reactjs redux

作为一个Redux初学者,考虑到(一个更大的应用程序)的想法,我想象一个类似于以下的根减速器:

const rootReducer = combineReducers({ accounting, crm, sales })
Run Code Online (Sandbox Code Playgroud)

在这种情况下,应用程序状态将包含accounting,crm和sales,即使用户仅使用应用程序的一部分.这可能是有利的,例如在会计和CRM之间来回切换时作为缓存,但您可能不希望保留所有已打开的视图的所有数据,即没有任何修剪的完整可能的状态树,在应用程序中永远或甚至在加载时将整个树初始化为其初始状态.

是否有解决这个问题的习语,模式或图书馆,或者我遗失了什么?

作为解决保留所有数据的部分解决方案,我想象一些事情,比如在导航离开应用程序的某些部分时将状态的一部分重置为其初始状态,给出一些声明性规则,例如:

  • 在接收时设置accounting = {}(间接地,通过诸如的动作ACCOUNTING_LEAVING)<Accounting/>componentWillUnmount
  • 收到crm.mail = {}时删除/设置<MailEditor/>componentWillUnmount

我没有看到以任何方式清理国家的例子.许多"list + detail view"示例存储状态{ list: [...], detail: {...} },但是当切换到详细视图时,列表既不清空也不清空或删除.我很快就会回到列表视图,但是在没有释放数据的情况下使用应用程序9到5时就不行了.

mar*_*son 5

一些相关的想法:

  • 除非您期望将数十或数百兆字节的数据缓存在您的存储中,否则您可能担心得太早了。编写您的应用程序,基准测试,然后进行优化。
  • 采取行动清除商店的某些部分是完全有效和合理的。
  • 我的Redux附加组件生态系统目录可能列出了一些有用的库。特别是,“ Component State”和“ Reducer”页面指​​向一些库,这些库执行诸如在商店中动态添加和删除reducer以及重置状态之类的操作。
  • 您可能也对我的高质量React和Redux教程集合感兴趣。

总体而言,如何组织状态,何时更新状态以及更新状态的方法取决于您自己。Redux只是为执行更新的过程提供了一种模式和规则。

  • 等等,您是在告诉我,不同的开发人员对做事有不同的想法?我很震惊,_震惊了!:) (3认同)