Redux文档的第一个原理是:
整个应用程序的状态存储在单个存储中的对象树中。
我实际上以为我对所有原则都了解得很好。但是我现在很困惑应用程序的含义。
我理解,如果应用程序仅意味着网站中复杂的小部分之一并且仅用一页即可工作。但是,如果申请意味着整个网站怎么办?我应该使用LocalStorage还是cookie或其他保留状态树的东西?但是如果浏览器不支持LocalStorage怎么办?
我想知道开发人员如何保留其状态树!:)
Redux文档的第一个原理是:
整个应用程序的状态存储在单个存储中的对象树中。
我实际上以为我对所有原则都了解得很好。但是我现在很困惑应用程序的含义。
我理解,如果应用程序仅意味着网站中复杂的小部分之一并且仅用一页即可工作。但是,如果申请意味着整个网站怎么办?我应该使用LocalStorage还是cookie或其他保留状态树的东西?但是如果浏览器不支持LocalStorage怎么办?
我想知道开发人员如何保留其状态树!:)
如果您想在浏览器刷新期间保持Redux状态,最好使用Redux中间件来实现。查看redux-persist和redux-storage中间件。他们都试图完成存储Redux状态的相同任务,以便可以随意保存和加载它。
-
编辑
自从我重新讨论了这个问题已经过去了一段时间,但是看到另一个问题(尽管答案更高)鼓励我提出自己的解决方案,我想我会再回答一次。
在进行此编辑时,两个库都在最近六个月内进行了更新。我的团队已经在生产中使用redux-persist几年了,没有任何问题。
尽管这似乎是一个简单的问题,但是您会很快发现,推出自己的解决方案不仅会导致维护负担,还会导致错误和性能问题。我想到的第一个例子是:
JSON.stringify
并且JSON.parse
不仅可以伤害表现在不需要的时候,但抛出的错误,当代码喜欢你的终极版商店的关键部分未处理可能会崩溃您的应用程序。综上所述,对于缩小的3kB +压缩(在此编辑时),这不是问题,我要求我的团队自行解决。
编辑25-八月-2019
如评论之一所述。原始的redux-storage软件包已移至react-stack。这种方法仍然专注于实现您自己的状态管理解决方案。
原始答案
尽管所提供的答案在某些时候是有效的,但重要的是要注意原始的redux-storage软件包已被弃用,并且不再被维护...
现在,如果您不想依赖其他软件包来避免将来出现此类问题,那么很容易推出自己的解决方案。
您需要做的只是:
1-创建一个函数,从中返回状态
localStorage
,然后将状态传递给createStore
第二个参数中的redux函数,以对商店进行水合2-监听状态更改,每次状态更改时,将状态保存到
localStorage
就这样...我实际上在生产中使用了类似的东西,但是我没有使用函数,而是编写了一个非常简单的类,如下所示...
然后在引导您的应用程序时...
希望对别人有帮助
性能说明
如果状态更改在您的应用程序中非常频繁,则过多地保存到本地存储可能会损害您的应用程序的性能,尤其是在要序列化/反序列化的状态对象图很大的情况下。对于这些情况,您可能希望去抖动或油门,使用保存状态的localStorage功能
RxJs
,lodash
或类似的东西。