我正在尝试将反应表分组与排序结合起来,并且遇到了一些奇怪的冲突。具体来说,当什么都没有打开时,我希望排序正常工作,但是当一个组被展开以查看它的孩子时,我不希望组的顺序移动。我目前已经设置了一个挂钩来查看展开状态以及自定义排序功能,但我不确定这是否是最好的方法。
const sortFnc = React.useMemo(
() =>
(
rowA: RWTypes.Row<Object>,
rowB: RWTypes.Row<Object>,
columnId: string,
desc: boolean
) => {
if (
Object.keys(expanded).some(
(id) =>
(id.startsWith(rowA.groupByID + ":") && !id.includes(">")) ||
id.includes(">" + rowB.groupByID + ":")
)
) {
return (desc ? 1 : -1) * (rowA.index > rowB.index ? -1 : 1);
}
return rowA.values[columnId] > rowB.values[columnId] ? 1 : -1;
},
[expanded]
);
我必须在这里使用扩展,因为当行被传递到 sortFnc 时,无论出于何种原因,似乎row.isExpanded
正确未定义。基本上在这里我只是拥有它,因此如果其中任何一个(或子组)被扩展,它就会使用默认索引作为组的排序。
这样做的问题是,如果组已经排序,那么您会得到一种奇怪的用户体验,即在您展开时将组从排序顺序更改为原始索引顺序,然后在您展开时返回到排序顺序。如果我可以获得显示该行的当前索引,这可以解决,但我似乎无法弄清楚如何获得它。
我还认为可能还有更好的方法可以完全做到这一点。谢谢!