我有一个稍微不同的用例,希望在初始加载时默认进行多重排序,但同时也要保持该排序顺序落后于任何未来的排序
这里的沙盒示例:
https://codesandbox.io/s/goofy-shadow-9tskr?file=/src/App.js
诀窍不是使用内置的 getSortByToggleProps(),而是添加您自己的使用 setSortBy 函数的 onClick。
以下代码灵感来自@khai nguyen 的回答
import React from 'react'
import { useTable, useSortBy } from 'react-table';
function Table({ columns, data, sortBy ...rest }) {
const {
getTableProps,
getTableBodyProps,
headerGroups,
rows,
prepareRow,
setSortBy,
} = useTable({
columns,
data,
initialState: {sortBy}
})
}, useSortBy);
然后在您的列标题元素中:
...PREV_TABLE_CODE
{headerGroup.headers.map(column => (
<th
{...column.getHeaderProps()}
onClick={() => handleMultiSortBy(column, setSortBy, sortBy)}
>
{column.render(
REST_TABLE_CODE....
还有handleMultiSortByCode(我的自定义函数,不是来自react-table):
isSortedDesc 可以是 true/false/undefined
export const handleMultiSortBy = (column, setSortBy, meinSortBy) => {
//set sort desc, aesc or none?
const desc =
column.isSortedDesc === true
? undefined
: column.isSortedDesc === false
? true
: false;
setSortBy([{ id: column.id, desc }, ...meinSortBy]);
};
注意:默认的 toggleSortBy() 函数中有一个 e.persist()。我不确定它提供了什么功能,但不使用它并没有我注意到的任何不良影响 - 库存多重排序不起作用(保持班次)但将其添加回来并不能解决这个问题。怀疑您可能需要 stock toggleSort。