在 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
案例的结果。
我在对 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
案例的结果。