【问题标题】:REST API to Redux State - Separate API endpoint for Redux state?REST API 到 Redux 状态 - Redux 状态的单独 API 端点?
【发布时间】:2018-12-11 19:21:06
【问题描述】:

我有一个 API,它返回从 MongoDB 获取的对象数组。

API:

[
  { _id: b23a, title: "Some Title" },
  { _id: c10x, title: "Some Other Title" },
  { _id: a31w, title: "And even more" },
]

数组是有序的。我想在我的 Redux 状态中保留这个顺序,但是,我也希望能够通过 id 访问所有对象。所以我想用以下方式组织我的状态:

{
  order: ["b23a","c10x","a31w"], //keeps the order
  byId: {
    "b23a" : { _id: b23a, title: "Some Title" },
    "c10x" : { _id: c10x, title: "Some Other Title" },
    "a31w" : { _id: a31w, title: "And even more" },
  }
}

解决此问题的最佳方法是什么?有一个单独的 API 路由以我需要 Redux 的确切形式发送回数据会更好吗?所以我会在发回之前修改服务器端的数据,然后把它放到我的 Redux 状态;或者:在客户端解析数组是否更常见/更有效?你通常会推荐什么?

【问题讨论】:

  • 您已经将 byID 中的订单作为键。为什么要将订单存储在另一个键中。
  • 对不起,这只是在示例中。 ids会由mongodb生成,所以不会有顺序。我现在已经更改了示例。
  • 这取决于很多参数,你的数据如何扩展,解析这个数组的最终目标是什么,服务器端是否已经有限制/分页排序/过滤,你刷新这些数据的次数。 .. 您所做的选择将基于性能优化。 (顺便说一句,你可能不需要像那样解析你的数组)
  • btw you probably don't need to parse your array like that 是什么意思?

标签: javascript reactjs rest redux flux


【解决方案1】:

MongoDB ids 不保证order。如果您希望插入订单创建一个date 字段并在MongoDb 中获取按date 字段排序的结果

如果您尝试根据title 订购objects,这非常简单,我建议您在客户端进行。如果您使用像Lodash 这样的库,这非常简单,您也不必保留订单。使用lodash,您可以做到这一点。

data = _.orderBy(array_of_objects, ['title']); 

【讨论】:

  • 我不想按标题排序,但数组已经保存了我需要的顺序。所以我只需要将我的数组转换为 redux 状态格式。问题是我是否应该在客户端进行此转换,或者我是否已经在服务器上进行了转换,然后有一个单独的端点以我的 Redux 状态所需的格式发送回数据。
  • @R.Kohlisch 您的要求很简单。不要仅仅为了秩序而创建单独的端点。在服务器端按插入日期排序并获取结果并在客户端创建结构。
  • 你编辑了你的答案,我很感激,但你似乎误解了我。我不是说 MongoDB id 创建订单,我也不需要任何订单。数组是有序的。我的问题只是关于通常在哪里将我的数组结构解析为我的 Redux 状态所需的结构。
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2016-03-09
  • 2017-01-10
相关资源
最近更新 更多