排序标准化数据的最佳方法是什么?

时间:2019-03-26 17:22:31

标签: reactjs redux react-redux normalizr

例如,我有来自服务器的数据

[{id: 1, pinned: true, date: 14.03.2019 ... }, 
 {id: 8, pinned: true, date: 20.02.2019 ...},
 {id: 2, pinned: false, date: 26.03.2019 ...},
 {id: 21, pinned: false, date: 25.03.2019 ...}, ...];

此数据已按日期排序,但固定的项目始终位于最前面。

在使用normalizr.js标准化数据之后,我将得到我的实体对象和ids数组,例如:

entities: { 1:[{id: 1, pinned: true, ... }, 8: { id: 2, pinned: true, ...}, ...},
ids: [1, 8, 2, 21 ...];

我将其存储在不同的reducer中。

渲染此数据,我使用:

const List = (props) => {
  return (
    <ul>
      {props.ids.map(id =>
        <Item id={id} key={id} />
      )}
    </ul>
  )
}
connect((state) => { ids: state.ids })(Item);

const Item = (props) => (
  <li>{props.contact.id}</li>
);

connect((state, ownProps) => { contact: state.entities[ownProps.id] })(Item)

但是如果从服务器上我会得到类似的东西

{id: 30, pinned: false, date: 27.03.2019 ...}

该项目应该在列表中的第一位,但在固定项目之后。

如何对id归约器进行排序?

进入我脑海的是它对数据进行非规范化处理,然后对其进行排序并再次进行规范化。但这感觉是“错误的”。

也许有一种方法可以不规范化?或者是解决这种情况的另一种最佳方法。

感谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

似乎顺序保留在结果属性中,而不是实体中。

看看:https://github.com/paularmstrong/normalizr/issues/9