在 React + Redux SPA SaaS 中处理超大型商店中的数据一致性

Dealing with data consistency in a very large store in React + Redux SPA SaaS

因此,我们计划将 PHP 后端与 React+Redux 前端服务器一起使用。我们正在开发一个非常大的应用程序,整个应用程序中有很多表。由于它将是一个单页应用程序,所有数据都包含在存储对象中。

所以,让我们看看我的心态是否正确。当我登录到应用程序时,我的状态几乎是空的。当我访问页面时,我的状态将开始填满。示例:我访问应用程序的 "photos",然后我最终将从我的数据库加载一些照片并将其放入我的商店:

state{ 
...
photos: [1: {...}, 3: {...}, 17:{...}] 
... 
}

以后,如果我需要 id = 17 的照片,我不需要再次请求,我可以从我的商店使用它,对吧?或者,也许我先从商店中取出它并请求它异步以检查它是否有更改。

随着我访问越来越多的页面,我将拥有一个巨大的存储对象,其中包含来自不同表的大量元素,例如。照片、视频、user_configurations、朋友等。我应该如何处理数据一致性?如果我需要一个 10 分钟前已经获取的对象,我应该再次请求它吗?这么大的store物件是不是"healthy"?

我打算使用 normalizr 和 reselect 在 react-redux 中操作我的日期。

有什么想法吗? 我想听听您认为处理这种情况的好方法是什么。

提前致谢!

法比奥

是的,规范化的 Redux 存储是标准推荐。有关详细信息,请参阅我的 React/Redux 链接列表的 Redux FAQ: Organizing Nested State , Structuring Reducers - Normalizing State Shape, and the Selectors and Normalization 部分。

至于缓存数据,从概念上讲,这与任何其他客户端设置应该没有什么不同。存储大量数据将占用相似数量的内存,无论您使用的是 Redux、Angular、Ember、Backbone 还是其他。由您决定要缓存多少,以及何时以及如何清理缓存数据。

最后,为了在 Redux 存储中操作 relational/normalized 数据,我推荐一个名为 Redux-ORM. You should absolutely use Reselect in general, and Normalizr is good for normalizing data you've received, but Redux-ORM provides a useful abstraction layer for querying and updating that normalized data once it's in the store. I've written a couple blog posts describing its use: Redux-ORM Basics and Redux-ORM Concepts and Techniques 的库。