← Назад ко всем вопросам

React Table

1️⃣ Как кратко ответить

React Table — это библиотека для создания таблиц в React-приложениях, которая предоставляет гибкие и мощные инструменты для работы с данными, включая сортировку, фильтрацию, пагинацию и виртуализацию. Она не предоставляет готовых компонентов, а предлагает набор хуков для построения таблиц, что позволяет разработчикам полностью контролировать внешний вид и поведение таблиц.

2️⃣ Подробное объяснение темы

React Table — это популярная библиотека для создания таблиц в React-приложениях. Она отличается от других библиотек тем, что не предоставляет готовых компонентов таблиц, а предлагает набор хуков, которые помогают разработчикам создавать таблицы с нужным функционалом и внешним видом. Это делает React Table очень гибкой и настраиваемой.

Зачем это нужно

Таблицы часто используются для отображения больших объемов данных. React Table позволяет легко управлять такими данными, предоставляя инструменты для сортировки, фильтрации, пагинации и даже виртуализации, что особенно важно для производительности при работе с большими наборами данных.

Как это работает

React Table предоставляет хуки, такие как useTable, useSortBy, usePagination, которые можно комбинировать для создания таблиц с нужным функционалом. Эти хуки возвращают объекты и функции, которые можно использовать для управления состоянием таблицы и её рендерингом.

Пример использования

Рассмотрим простой пример использования React Table для создания таблицы с сортировкой и пагинацией.

import React from 'react';
import { useTable, useSortBy, usePagination } from 'react-table';
​
// Данные для таблицы
const data = React.useMemo(
  () => [
    { col1: 'Hello', col2: 'World' },
    { col1: 'React', col2: 'Table' },
    { col1: 'Frontend', col2: 'Development' },
  ],
  []
);
​
// Определение колонок
const columns = React.useMemo(
  () => [
    {
      Header: 'Column 1',
      accessor: 'col1', // "accessor" указывает, какое поле данных использовать
    },
    {
      Header: 'Column 2',
      accessor: 'col2',
    },
  ],
  []
);
​
function MyTable() {
  // Использование хуков для создания таблицы
  const {
    getTableProps, // Свойства для <table>
    getTableBodyProps, // Свойства для <tbody>
    headerGroups, // Группы заголовков
    rows, // Строки данных
    prepareRow, // Функция для подготовки строки
    page, // Страница данных для отображения
    canPreviousPage, // Возможность перейти на предыдущую страницу
    canNextPage, // Возможность перейти на следующую страницу
    pageOptions, // Опции страниц
    nextPage, // Функция для перехода на следующую страницу
    previousPage, // Функция для перехода на предыдущую страницу
    state: { pageIndex }, // Текущее состояние страницы
  } = useTable(
    {
      columns,
      data,
    },
    useSortBy, // Хук для сортировки
    usePagination // Хук для пагинации
  );
​
  return (
    <>
      <table {...getTableProps()}>
        <thead>
          {headerGroups.map(headerGroup => (
            <tr {...headerGroup.getHeaderGroupProps()}>
              {headerGroup.headers.map(column => (
                <th {...column.getHeaderProps(column.getSortByToggleProps())}>
                  {column.render('Header')}
                  <span>
                    {column.isSorted
                      ? column.isSortedDesc
                        ? ' 🔽'
                        : ' 🔼'
                      : ''}
                  </span>
                </th>
              ))}
            </tr>
          ))}
        </thead>
        <tbody {...getTableBodyProps()}>
          {page.map(row => {
            prepareRow(row);
            return (
              <tr {...row.getRowProps()}>
                {row.cells.map(cell => (
                  <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
                ))}
              </tr>
            );
          })}
        </tbody>
      </table>
      <div>
        <button onClick={() => previousPage()} disabled={!canPreviousPage}>
          Previous
        </button>
        <button onClick={() => nextPage()} disabled={!canNextPage}>
          Next
        </button>
        <span>
          Page{' '}
          <strong>
            {pageIndex + 1} of {pageOptions.length}
          </strong>
        </span>
      </div>
    </>
  );
}
​
export default MyTable;

Объяснение кода

  • Импорт хуков: useTable, useSortBy, usePagination — это хуки из React Table, которые добавляют функциональность таблице.
  • Данные и колонки: data и columns определяют, какие данные будут отображаться и как они будут структурированы.
  • useTable: Этот хук инициализирует таблицу, возвращая методы и свойства для управления таблицей.
  • useSortBy и usePagination: Эти хуки добавляют сортировку и пагинацию соответственно.
  • Рендеринг таблицы: Используются методы, возвращаемые хуками, для рендеринга таблицы и управления её состоянием.

React Table позволяет создавать мощные и настраиваемые таблицы, которые могут обрабатывать большие объемы данных, сохраняя при этом высокую производительность и гибкость.

Тема: React
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки