Зачастую, когда у вас есть таблица с информацией, которую вы хотите иметь возможность отсортировать информацию в таблице в порядке возрастания или убывания, особенно когда вы имеете дело с цифрами.
В этом руководстве мы увидим, как именно это сделать, чтобы использовать inventjs.
Вот что мы собираемся построить:
У нас есть список топ-10 миллиардеров в мире, и мы хотим отсортировать список на основе чистой стоимости миллиардеров. Я получил информацию о списке от veek.co.uk. Веб-сайт.
Предпосылки
Прежде чем мы будем двигаться дальше, давайте посмотрим на то, что мы собираемся использовать в этом руководстве:
- Fontawesome – для иконок
- Фонд – для общего стиля. Мы используем это особенно для стайлинга стола, поскольку мы не хотим отвлекаться от укладки в этом руководстве
- Rectjs – пожалуйста Примечание Что я не собираюсь объяснить основы реагирования в этом руководстве. Продолжая, я предполагаю, что вы работали с ним раньше (хотя то, что мы собираемся делать, не сложно вообще?)
- Данные – как упомянутые выше, мы получим список топ-10 миллиардеров в мире плюс их нетто
Данные
Мы собираемся создать массив с объектами, содержащими имя миллиардеров и их чистой стоимостью в миллиардах USD:
const tableData = [
{
name: 'Amancio Ortega',
net_worth: 62.7
},
{
name: 'Bernard Arnault',
net_worth: 76
},
{
name: 'Bill Gates',
net_worth: 96.5
},
{
name: 'Carlos Sim Helu',
net_worth: 64
},
{
name: 'Jeff Bezos',
net_worth: 131
},
{
name: 'Larry Ellison',
net_worth: 58
},
{
name: 'Larry Page',
net_worth: 50.8
},
{
name: 'Mark Zuckerberg',
net_worth: 62.3
},
{
name: 'Michael Bloomberg',
net_worth: 55.5
},
{
name: 'Warren Buffet',
net_worth: 82.5
}
];
Компонент приложения
Этот компонент будет главным, который будет сгенерирован на странице. У него есть только текст + <Таблица/> составная часть и это передает к нему то Табледата Мы объявили выше.
const App = () => (); ReactDOM.render(A list of top 10 richest billionaires.
Click on the icon next to "Net Worth" to see the sorting functionality
* Data gathered from{' '} theweek.co.uk
, document.getElementById('app'));
Теперь, когда все это не в пути, мы можем сосредоточиться на том, что важно?
Компонент таблицы
Это будет компонент класса, так как нам нужно использовать в нем состояние, но сначала давайте сосредоточимся на оказывать метод. Мы будем карта над данные Это происходит от родительского компонента, и мы создадим строку стола ( TR ) для всех данных в массиве. Наряду с тем, что у нас есть базовая структура стола ( таблица> Thead + Tbody ).
class Table extends React.Component {
render() {
const { data } = this.props;
return (
data.length > 0 && (
| Name | Net Worth |
|---|---|
| {p.name} | ${p.net_worth}b |
Далее, сортировка …
У нас будет 3 типа сортов: «По умолчанию» , «вверх» (по возрастанию), «вниз» (по убыванию). Эти типы будут изменены с помощью кнопки, которая будет иметь значок Fontawesome в зависимости от того, какой тип сортировки в настоящее время активен. Давайте создадим объект, который даст нам необходимую информацию:
const sortTypes = {
up: {
class: 'sort-up',
fn: (a, b) => a.net_worth - b.net_worth
},
down: {
class: 'sort-down',
fn: (a, b) => b.net_worth - a.net_worth
},
default: {
class: 'sort',
fn: (a, b) => a
}
};
Как видите, у нас есть два реквизита для каждого типа сортов:
Класс– это будет использоваться значком в кнопке, как мы увидим, какое состояние в настоящее время активноFN– Это будетФункцияЧто мы будем использовать для сортировки элементов в массиве до того, как мы отображим его в таблице. В основном мы сравниваемnet_worthСвойство объектов
До сих пор! ?
Нам также нужно добавить Currentsort Состояние в Таблица Компонент, который будет отслеживать активный тип сортировки и, наконец, у нас будет onsortchange Метод, который будет называться каждый раз, когда кнопка сортировки будет нажата, и она изменит Currentsort ценить.
Много слов?, Но давайте посмотрим код, и я поспорил, вы поймете?
class Table extends React.Component {
// declaring the default state
state = {
currentSort: 'default'
};
// method called every time the sort button is clicked
// it will change the currentSort value to the next one
onSortChange = () => {
const { currentSort } = this.state;
let nextSort;
if (currentSort === 'down') nextSort = 'up';
else if (currentSort === 'up') nextSort = 'default';
else if (currentSort === 'default') nextSort = 'down';
this.setState({
currentSort: nextSort
});
};
render() {
const { data } = this.props;
const { currentSort } = this.state;
return (
data.length > 0 && (
| Name | Net Worth |
|---|---|
| {p.name} | ${p.net_worth}b |
Обратите внимание, что мы не меняем оригинал данные Массив, но мы создаем другой массив с ... (Спред) Оператор, а затем мы используем FN дано sorttypes объект для сортировки массива соответственно.
Заключение
Это в значительной степени! Теперь вы знаете, как сортировать таблицу на основе значений в столбце. Поздравляю!
Счастливое кодирование!
Первоначально опубликовано www.florin-pop.com