【问题标题】:How do you clean up Redux' state?你如何清理 Redux 的状态?
【发布时间】:2016-08-19 02:38:36
【问题描述】:

作为一个 Redux 初学者,给定(的想法)一个更大的应用程序,我想象一个类似于以下的 root reducer:

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

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

是否有成语、模式或库可以解决这个问题,或者我错过了什么?

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

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

我还没有看到以任何方式清理状态的示例。许多“列表+详细视图”示例存储类似{ list: [...], detail: {...} } 的状态,但是当切换到详细视图时,列表既不会被清空,也不会被清空,也不会被删除。当我稍后可能会返回列表视图时,这很好,但在使用应用程序 9 到 5 时却没有释放数据。

【问题讨论】:

    标签: reactjs state redux reducers


    【解决方案1】:

    一些相关的想法:

    • 除非您期望在您的存储中缓存数十或数百兆字节的数据,否则您可能过早地担心这一点。编写您的应用、基准测试,然后进行优化。
    • 为清理部分商店而采取的调度行动是完全有效和合理的。
    • 我的Redux addons ecosystem catalog 可能列出了一些有用的库。特别是,Component StateReducer 页面指向一些库,这些库执行诸如动态添加和删除存储中的 reducer 以及重置状态等操作。
    • 您可能也对我收集的优质React and Redux tutorials感兴趣。

    总体而言,如何组织状态、更新时间以及更新内容取决于您自己。 Redux 只是为进行更新的过程提供了模式和规则。

    【讨论】:

    • (另一个)有用的列表,几乎立即将我带到 react-ui,它似乎以类似的方式处理删除状态(在 componentWillUnmount 上);我将调查一些库以找到(或添加......)一个适合我的用例的库。用于管理 reducer 和 state 的基于组件的方法似乎可以通过许多不同的方式得到解决(至少与关于什么应该是 state 存在的意见一样多)。
    • 等等,你是在告诉我不同​​的开发人员对如何做事有不同的想法?我很震惊,震惊! :)
    • 我只是在调查 Redux 的过程中,对此感到非常困惑。在我看来,在大型多视图应用程序中,您通常希望状态在用户离开“页面”之后保留在浏览器中,这似乎是合乎逻辑的.将状态存储在组件中意味着您不必担心这一点 - 状态会随组件一起销毁 - 但将其放入 Redux 存储似乎需要显式管理其生命周期方面的大量开销。这让我非常远离 Redux,而倾向于一种基于组件的状态管理方法。我错过了什么?
    • 是的,如果您将数据存储在组件内,并且您停止渲染这些组件,那么数据确实会“自动”消失。但是,这些数据也不容易在应用程序的多个部分之间共享。如果您将数据放入 Redux,则可以在应用程序的任何位置轻松访问它,但也由您决定何时清除该数据。我不会说它需要“大量开销”,确切地说——它可以很容易地从componentWillUnmount 分派一个“CLEAN_UP”操作,并在减速器中适当地处理它。
    • @markerikson 自去年以来是否有任何消息,是否有任何图书馆可以为我们处理?
    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多