javascript - 使用自定义排序时不重绘 Ag-Grid
问题描述
我在 React 中使用 AG-GRID(否则效果很好),我有一个如下所示的列定义:
{
headerName: "Firm",
sortable: true,
sort: "asc",
sortingOrder: ["asc", "desc"],
headerTooltip: "Firm",
field: "firm",
cellStyle: { "text-align": "left" },
comparator: (valueA, valueB, nodeA, nodeB, isInverted) => {
let retval;
if (isInverted) {
retval = valueB.localeCompare(valueA);
} else {
retval = valueA.localeCompare(valueB);
}
return retval;
}
}
我添加自定义比较器的原因是默认比较器区分大小写,因此“Abc”排在“xyz”之后。
由于我的第一次尝试没有奏效,我尝试将示例简化为上面的代码,据我了解,它应该与默认排序完全一样。
但问题是网格中什么也没有发生。
请注意,当我单击它时,排序箭头会显示在标题中。我只有一个可排序的列,这就是这一列。我可以验证它是否被调用,我将值记录到控制台并且值和返回值都正常。每次单击标题时都会正确设置反向标志。
但是网格没有更新???为什么?
如果我删除比较器代码,一切都会像以前一样工作。与区分大小写的比较。
使用自定义比较器时我需要做更多的事情吗?
感觉就像我错过了一些简单的东西。
- - 编辑 - -
如果我出于某种未知原因会从排序函数返回随机值,就像这样
comparator: (valueA, valueB, n1, n2, inverse) => {
if (valueA === valueB) return 0;
if (Math.random() > 0.5) {
return valueA < valueB ? -1 : 1;
} else {
return valueA > valueB ? -1 : 1;
}
}
然后网格更新....当然是随机排列的行,但至少发生了一些事情。当我有“正确”的排序功能时,什么也没有发生......
谁能解释这种奇怪的行为?
解决方案
在编写了一个简单的测试应用程序并测试了所有可能性后找到了答案。
显然,您应该忽略反参数,并“正常”排序反参数具有的任何值。所以正确的代码应该是:
comparator: (valueA, valueB, n1, n2, inverse) => {
if (valueA === valueB) return 0;
return valueA < valueB ? -1 : 1;
}
或者在我的情况下使用字符串:
comparator: (valA, valB, n1, n2, inverse) => {
return valA.localeCompare(valB);
}
每当 sortOrder 从“asc”变为“desc”时,网格似乎会在内部反转这种排序
推荐阅读
- java - 当视图对用户可见时,是否有任何回调的侦听器?
- html - 从 LinkedIn 移动应用程序浏览器打开 Telegram 链接
- package.json - 如何通过 package.json 升级到 popperjs/core:名称只能包含 URL 友好字符?
- pandas - 我在熊猫数据框中有一个字符串列表,我需要有条件地将字符串“american”更改为“english”
- reactjs - 如何使用 google places api 获取城市照片
- r - R:计算多变量相关矩阵时如何实现并行处理?
- python - 每 40 个字符插入一个换行符不起作用(但没有错误)
- random - Puppeteer 随机用户代理参数
- python - if 语句为字符串变量创建新列 pandas
- android - 是否可以让 Laravel Sanctum 同时使用令牌和身份验证?