为React + Redux应用程序发送标准化或非规范化API响应是否更好?

时间:2017-01-10 23:44:54

标签: reactjs redux denormalization normalize redux-orm

我正在写一个react-redux应用程序。在开始时,它调用单个端点,该端点以大量嵌套的JSON返回大量数据。然后我将其标准化并将其放入我的redux-orm模式中 对我来说,在后端创建嵌套数据似乎很愚蠢,只是为了对其进行规范化,以便对其进行规范化,因为它来自规范化的PostgreSQL数据库。

Database = Normalized --> 
API = Denormalized --> 
Frontend = Normalized

最佳做法是发回规范化的API响应吗?

3 个答案:

答案 0 :(得分:1)

这会有所帮助;如您所说,建议规范化数据的状态为:https://redux.js.org/faq/organizing-state#how-do-i-organize-nested-or-duplicate-data-in-my-state

如果您仍要从API发送嵌套数据,例如如果只发送需要的内容或现有的API,则可以在将数据添加到商店之前在客户端进行标准化。 例如,使用以下库:https://redux.js.org/faq/organizing-state#how-do-i-organize-nested-or-duplicate-data-in-my-state

答案 1 :(得分:1)

我不明白为什么有人会在正面规范化。我进行规范化的全部原因是为了摆脱重复。与多次发送相同的嵌套数据(例如,用户对象)不同,我嵌套了用户ID,并在名为“用户”的单独属性中发送了所有需要的用户及其ID作为键,以便快速,轻松地进行访问,如下所示:

"users": {
    "1": { "id": "1", "name": "user_name", ...rest_of_user_details},
    ...
}

毕竟,前端更易于处理非规范化数据。仅需按原样列出具有嵌套对象的数据,而不用使用对象ID访问其他属性内的那些对象,只需较少的代码。

答案 2 :(得分:0)

我不确定是否有“好的”方法。如果您必须处理现有的API,请对其进行处理,并在前端代码中使用代理/解析器将后端有效负载映射到redux-orm存储中,以及在另一端。

经过将近一年的React / Redux / Redux-orm应用Wisembly Jam的生产,我不会在这里假装给出答案,而是提供反馈。

从头开始时,我们选择将JsonAPI spec用于我们的API。我们喜欢它,因为它以与我们的PostgreSQL方案以及我们的redux-orm方案非常合适的方式公开了对象和关系。

这样,就不需要双向进行模型关系嵌套,只需在data字段中处理的普通对象在included字段中包括关系。看起来可以很好地协同工作。

您可以检查我们的应用程序的“网络”标签,以查看我们的api有效负载响应以及我们的redux-orm存储(使用Redux Chrome扩展程序)。

尽管我的英语水平不高,但希望有所帮助:)