是否存在将可序列化引用存储在redux状态树中的非可序列化对象的常用方法?
简单的用例是将一个[相当大的]文件从reactjs客户端上传到服务器。如果这样的上传是由redux动作驱动的表单提交算法的一部分,我们需要在商店中保留对该文件的引用。最简单的方法是将文件的全部内容保存在商店中,但这对于大文件来说效率很低。
我想到的一种方法是引入一个简单的{stringkey
:Blob}地图,并将stringkey
保留在状态树中。虽然在这种情况下我们需要实现引用计数或其他东西来删除未使用的密钥。
有更好的方法吗?
答案 0 :(得分:2)
我不再使用商店来存储大文件。它维护应用程序的状态,因此应该只需要对文件的引用(顺便提一下,按照数据库实践的方式保持存储规范化是一种好习惯。)
我会保留上传文件远离reducer逻辑的副作用。您可以使用redux中的中间件执行此操作,以便将文件作为操作的一部分上载;成功时,后续操作会使用后续渲染,应用程序状态等所需的任何内容更新商店。实际文件(如果需要)可以存储在别处,只能从商店中引用。