处理后端执行的排序实体的最佳方法是什么?当前,我的状态无法识别,当我使用适配器添加已排序的项目时,某些项目已更改,而项目仍与排序之前相同,但它们在数组中的位置已更改。
我从后端接收排序后的元素,然后将它们添加到当前实体中,但是当实体的所有属性都相同并且将其视为未发生任何变化时,状态无法识别位置变化。
state{
...state
entity1: adapter.addMany(payload {
...state.entity1
loaded: true
)
}
我知道问题出在这里
...state.entity1
因为我连接了与有效负载提供的数组相同的数组。仅更改位置。
目前,我正在欺骗,因为第二个参数提供了初始状态
state{
...state
entity1: adapter.addMany(payload,
adapter.getInitialState({
loaded: true
})
}
答案 0 :(得分:0)
我通过在选择器函数中添加排序方法来解决此问题,并在Entity状态下添加了参数以保存订单,这是我的解决方案:
选择器:
export const selectCategoriesInStore = createSelector(
selectCategoriesState,
categoriesState => {
const items: CategoryModel[] = [];
each(categoriesState.entities, element => {
items.push(element);
});
const httpExtension = new HttpExtenstionsModel();
const result: CategoryModel[] = httpExtension.sortArray(items, categoriesState.lastQuery.sortField, categoriesState.lastQuery.sortOrder);
return new QueryResultsModel(result, categoriesState.totalCount, '');
}
);
您可以在这里看到我使用方法httpExtension.sortArray()对结果进行排序。
还原剂:(州)
export interface CategoryState extends EntityState<CategoryModel> {
listLoading: boolean;
actionsLoading: boolean;
totalCount: number;
lastCreatedCategoryId: number;
lastQuery: QueryParamsModel;
showInitWaitingMessage: boolean;
error: any;
lastAction: string;
progress: number;
}
我添加了 lastQuery 参数,以便可以从选择器中访问排序参数。
如果您使用的是网页,请不要忘记也从后端对数据进行排序。