在React Native应用中使用Redux的Realm

29

我即将着手开发一个React Native应用程序,深信使用Redux来管理应用程序状态的好处,但我希望通过使用Realm进行持久存储,使应用程序的数据在离线时仍然可用。我想知道的是Redux如何与Realm协同工作?

我正在开发的应用程序将通过RESTful API获取大量JSON数据,然后我希望将这些数据保存到本地存储中,而Realm似乎是一个很好的选择。但我不确定的是,Realm数据库将如何存在于Redux存储中?它是否必须存在于存储之外?在基于Redux的应用程序中使用Realm是否有什么矛盾之处?

我已经搜索了许多文章,描述了在Redux中使用Realm或其他存储选项(Asyncstorage或SQLite)处理大型数据集的情况,但找到的信息很少。


3
为什么不定义LOAD/SAVE动作,以便实际上进行异步调用来加载/保存正确的数据片段到realm数据库。这有点像将realm数据库视为另一个服务,因为你不能一次性加载大量数据。 - iamnat
我可以问一下,“大”有多大吗? - JeremyKun
嘿,我遇到了类似的问题:我从Firebase实时数据库中提取和显示数据到React Native应用程序中,适用于iOS和Android。我的数据库很大(它包含超过14400行),即使没有互联网连接,我也必须显示所有这些数据。因此,我考虑制作一个jSON文件,每当没有连接时就读取和写入数据,但是,后来我发现了Realm。那么你认为它是否符合我的需求?我还在我的应用程序中使用Redux,它会与我的应用程序产生矛盾吗?谢谢。 - user3521011
这个 redux-persist 问题讨论了这个特定的主题。我不认为它会发生。 - DerpyNerd
1个回答

13

当你只有React组件处理数据时,Redux存储库是一个不错的选择。使用存储库可以方便地维护应用程序的状态。例如,你不需要Realm来存储当前登录状态或标志,表示用户是否已跳过登录。在这里,Redux存储库胜出。

另一方面,当你需要处理复杂查询或大量数据时,Realm是最佳选择。使用Realm的好处是,数据可以轻松地在React组件以及非React组件/类中访问。Realm为你提供了使用Realm浏览器监视数据并在模型之间构建关系的优势。如果你需要进行任何离线同步,Realm也是最佳选择。

它是否必须存在于存储库之外 - 是的

在基于Redux的应用程序中使用Realm是否矛盾 - 这取决于你使用存储库的目的。


谢谢你的出色回答 :-) 自提出这个问题以来,我对redux是什么以及如何使用它有了更好的理解,并且我完全同意您上面的陈述。 我仍然不确定是否需要使用Realm还是Redux store就足够了。 对于我的用例,我怀疑后者。再次感谢。 - oldo.nicho
我们正在做出类似的决定 - 你做出了最终决定吗?如果是,你对选择满意吗?我们已经在某种程度上实现了Realm - 但发现它给我们的项目增加了很多开销,因此正在考虑将其移除。我只是想知道离线对许多移动应用程序有多重要 - 特别是因为我们的应用程序是电子商务应用,人们从未期望离线使用。 - Mary Camacho
我是clockit.io的联合创始人。在这里,我们将用户的地理位置作为离线位置跟踪的一部分后台存储。Redux和Realm的选择完全取决于您的应用程序需求。如果您正在使用电子商务,除非您有非常特定的离线存储要求,否则使用Realm会导致额外负担。 - Jaseem Abbas
3
依我个人的看法,Redux 和 Realm 不应该互相排斥。这只是要解决一个应用程序中不同层次的问题。React 和 Redux 主要在表现层处理,Redux store(即使它被称为“store”)并不应该成为任何类型的持久性设备。Redux store 只是简单地存储不同的变量,以便 UI 组件能够相应地表现。另一方面,Realm 解决了持久层的问题。应该使用 React 和 Redux 获取数据并将其显示出来,并根据自己的业务逻辑使用 Realm 将它们离线缓存。 - CarlLee
1
那么,Realm本身是否提供了Redux的一些好处呢?也就是说,它是否提供了自己的方式来自动更新UI组件,如果数据发生变化的话? - Greg
@Greg Realm提供了通知功能,可以用于触发UI刷新,但您需要检查粒度是否符合应用程序的需求。我可以想象一个数据流,其中用户交互触发网络请求,响应将更改写入Realm,这将触发一个Realm通知,该通知使用最新的Realm数据分派Redux操作。https://realm.io/docs/javascript/latest/#notifications - blwinters

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