我正在写一个react-redux应用程序。一开始,它调用单个端点,该端点以大量嵌套的JSON的形式返回大量数据。然后我将其规范化,并将其放入我的redux-orm模式中。
在我看来,在后端创建嵌套数据只是为了对前端的嵌套数据进行循环,以便对其进行规范化,这似乎很愚蠢,因为它来自标准化的PostgreSQL数据库。
Database = Normalized -->
API = Denormalized -->
Frontend = Normalized仅仅发回标准化的API响应是最佳实践吗?
发布于 2018-10-24 20:35:43
我不确定有没有一个“好”的方法。如果你必须处理现有的API,那就处理它,并在你的前端代码中使用代理/解析器来将你的后端有效负载映射到redux-orm存储中,同时也映射到另一端。
我不会在这里假装给出一个答案,而是在我们的React/Redux/Redux-orm应用程序Wisembly Jam生产了近一年后,给出一个反馈。
当我们从头开始的时候,我们选择为我们的API使用JsonAPI spec。我们喜欢它,因为它以一种非常适合我们的PostgreSQL方案和redux-orm方案的方式公开了对象和关系。
这样,不需要双向的模型关系嵌套,只需要在data字段中处理纯对象,在included字段中包含关系。它看起来在一起工作得很好。
您可以查看我们的应用程序Network选项卡来查看我们的api有效负载响应,以及我们的redux-orm存储(使用Redux Chrome扩展)。
希望这会有一点帮助,尽管我是英语,而且不是一个合适的答案:)
发布于 2020-04-17 03:34:40
这会有所帮助;正如您所说,建议在状态: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
发布于 2020-04-27 22:42:42
我不明白为什么会有人在前线正常化。我做标准化的全部原因是为了摆脱重复。我不是多次发送相同的嵌套数据,例如user对象,而是将用户id嵌套在一个名为" users“的单独属性中,将所有需要的用户及其id作为键发送,以便快速方便地进行访问,如下所示:
"users": {
"1": { "id": "1", "name": "user_name", ...rest_of_user_details},
...
}毕竟,前端处理非规范化数据要容易得多。只需较少的代码就可以按原样列出嵌套对象的数据,而不是使用对象ids访问其他属性中的这些对象。
https://stackoverflow.com/questions/41580461
复制相似问题