#javascript #reactjs #react-table
#javascript #reactjs #react-таблица
Вопрос:
Header: "Votes",
accessor: "Voter",
filterable: false,
Cell: row => <Voter id={row.index} vote={this.filterCount(row.index)} />,
sortMethod: null //sort based on vote prop passed above ^
Я хочу, чтобы моя таблица сортировалась на основе наибольшего значения свойства, которое я передаю компоненту избирателя в ячейке. За исключением того, что любое значение, которое я передаю sortMethod
, обращается к данным из моего файла JSON, но мне нужно использовать данные, которые я извлек, извлеченные в компоненте. Есть ли способ? Любая помощь очень ценится
Комментарии:
1. читателям было бы понятнее, если бы вы могли предоставить больше информации, например, какую библиотеку вы используете для отображения таблицы. И что вы пробовали до сих пор?
Ответ №1:
Предполагая, что вы используете react-table (который вы добавили в качестве тега), методу сортировки может быть присвоена функция, которая принимает 2 значения в качестве аргументов):
sortMethod: (a, b) => {
a = (a === null || a === undefined || a === '') ? -Infinity : a;
b = (b === null || b === undefined || b === '') ? -Infinity : b;
a = parseInt(a);
b = parseInt(b);
if (a === b) {
return 0;
}
return a > b ? 1 : -1;
}
Метод сортировки должен работать так же, как обычные методы сортировки, используемые типами javascript. Это очень простой метод сортировки, который просто идет по целочисленному значению и сортирует a выше b, если оно больше, и обрабатывает любые крайние случаи неопределенных переменных, перемещая их в самый низ.
Это немного абстрактно, этого достаточно, чтобы указать, как отсортировать 2 элемента, которые он будет применять ко всем строкам. Значения не обязательно называть A
и B
, это просто проще. A и B оба представляют 2 значения ячейки. ЕСЛИ значение вашей ячейки является объектом, а не целым числом, то A и B также являются объектами, и вы должны использовать значение, которое хотите сравнить. Например, если значения вашей ячейки являются объектами, и вы хотите выполнить сортировку на основе voter_id, вы должны сделать:
return a.voter_id > b.voter_id ? 1 : -1;
вместо
return a > b ? 1 : -1;
Комментарии:
1. спасибо за ответ. Это полезно. Но мне все еще интересно, как я могу извлечь данные, которые являются внешними по отношению к столбцу. Например, я хотел бы использовать row.index в моей функции сортировки. Есть ли способ это сделать?
2. метод сортировки просто расширяет собственную функцию Array.sort(), поэтому он может использовать только (значение 1, значение 2, desc) в качестве аргументов. Если ячейка создана из вашего пользовательского компонента
Voter,
, то у нее есть доступ к этому объекту при сортировке. Итак, если компонент Voter имеет идентификатор (который в вашем примере кода вы установили в row.index), использованиеa.id
будет row.index