在 redux store 中按实体 属性 对 id 进行排序

Sort ids by entity property in redux store

我在对 redux-store 中的数据进行排序时遇到问题。

我的店铺是这样的:

state = {
  ids: [1,2,3,4, /*...*/],
  entities: {
    1: {
      id: 1,
      time: 50
    }
    //...
  }
};

在我的 reducer 函数中,我想对 id 进行排序,这样我的数据将始终排序并准备好使用,而不需要每次都排序:

case LOAD_LIST_SUCCESS:
  return Object.assign({}, state,
    {ids: [state.ids, ...action.payload.normalized.result].sort()}, //Here is my problem...
    {entities: [...state.entities, ...action.payload.normalized.entities.items});

如何按实体时间对 ids 数组进行排序 属性?

要按 time 属性 排序,您需要使用 sort 函数进行更高级的操作。

我举了一个简单的例子:

[state.ids, ...action.payload.normalized.result].sort((id1, id2) => {
  const entity1 = state.entities[id1]
  const entity2 = state.entities[id2]

  if (entity1.time < entity2.time) {
    return -1
  }

  if (entity1.time > entity2.time) {
    return 1
  }

  return 0
})

但是,此方法不会考虑附加到当前操作的任何规范化实体,因为状态的实体列表尚未更新,因此您可能需要将新状态分配给变量,然后对基于新状态中的实体的 ID,然后 return 它作为 LOAD_LIST_SUCCESS 案例的结果。