Попрощайтесь с полосами прокрутки и используйте навигацию с помощью мыши в данных таблицы

Полосы прокрутки — распространенная функция веб-приложений при работе с большими объемами табличных данных. Однако иногда они могут быть громоздкими и мешать пользователям эффективно перемещаться по информации. В этой статье мы рассмотрим различные методы удаления полос прокрутки из данных таблицы и замены их навигацией с помощью мыши с использованием библиотеки Material-UI (Mui).

Метод 1. Разбиение на страницы
Один простой способ избежать полос прокрутки — реализовать в таблице разбиение на страницы. Вместо отображения всех данных одновременно вы можете разделить их на более мелкие фрагменты или страницы. Затем пользователи могут перемещаться по страницам с помощью щелчков мыши или специальных кнопок навигации. Этот метод особенно полезен при работе с огромным объемом данных, поскольку повышает производительность и делает таблицу более управляемой.

// Example code using Material-UI TablePagination component
import React from 'react';
import { Table, TablePagination } from '@mui/material';
const data = [...]; // Your table data
const TableComponent = () => {
  const [page, setPage] = React.useState(0);
  const [rowsPerPage, setRowsPerPage] = React.useState(10);
  const handleChangePage = (event, newPage) => {
    setPage(newPage);
  };
  const handleChangeRowsPerPage = (event) => {
    setRowsPerPage(parseInt(event.target.value, 10));
    setPage(0);
  };
  return (
    <>
      <Table>
        {/* Render your table rows here */}
      </Table>
      <TablePagination
        rowsPerPageOptions={[10, 25, 50]}
        component="div"
        count={data.length}
        page={page}
        rowsPerPage={rowsPerPage}
        onChangePage={handleChangePage}
        onChangeRowsPerPage={handleChangeRowsPerPage}
      />
    </>
  );
};
export default TableComponent;

Метод 2: расширяемые строки
Другой подход заключается в использовании расширяемых строк, где каждая строка содержит скрытый раздел, который расширяется при нажатии. Таким образом, таблица остается компактной, и пользователи могут просматривать дополнительную информацию без необходимости использования полос прокрутки. Этот метод хорошо работает, когда у вас ограничено количество дополнительных данных для отображения в строке.

// Example code using Material-UI Collapse component
import React from 'react';
import { Table, TableBody, TableCell, TableRow, Collapse } from '@mui/material';
const data = [...]; // Your table data
const TableComponent = () => {
  const [expandedRows, setExpandedRows] = React.useState([]);
  const handleRowClick = (rowId) => {
    if (expandedRows.includes(rowId)) {
      setExpandedRows(expandedRows.filter((id) => id !== rowId));
    } else {
      setExpandedRows([...expandedRows, rowId]);
    }
  };
  return (
    <Table>
      <TableBody>
        {data.map((row) => (
          <React.Fragment key={row.id}>
            <TableRow onClick={() => handleRowClick(row.id)}>
              <TableCell>{row.name}</TableCell>
              <TableCell>{row.age}</TableCell>
              {/* Render other table cells */}
            </TableRow>
            <TableRow>
              <TableCell colSpan={/* Number of columns */}>
                <Collapse in={expandedRows.includes(row.id)}>
                  {/* Additional information for the expanded row */}
                </Collapse>
              </TableCell>
            </TableRow>
          </React.Fragment>
        ))}
      </TableBody>
    </Table>
  );
};
export default TableComponent;

Метод 3: виртуализация
Виртуализация — это метод, который визуализирует только видимую часть таблицы, уменьшая количество элементов DOM и повышая производительность. Используя такие библиотеки, как React-Virtualized или Reaction-Window, вы можете добиться плавной прокрутки без необходимости использования полос прокрутки. Эти библиотеки эффективно управляют большими списками и таблицами, отображая только те элементы, которые видны в области просмотра.

// Example code using react-window library
import React from 'react';
import { FixedSizeList } from 'react-window';
const data = [...]; // Your table data
const TableComponent = () => {
  const Row = ({ index, style }) => {
    const row = data[index];
    return (
      <div style={style}>
        <div>{row.name}</div>
        <div>{row.age}</div>
        {/* Render other table cells */}
      </div>
    );
  };
  return (
    <FixedSizeList
      height={/* Height of the visible portion */}
      width={/* Width of the table */}
      itemSize={/* Height of each row */}
      itemCount={data.length}
    >
      {Row}
    </FixedSizeList>
  );
};
export default TableComponent;

Реализуя эти методы, вы можете улучшить взаимодействие с пользователем при работе с табличными данными. Независимо от того, выбираете ли вы нумерацию страниц, расширяемые строки или виртуализацию, использование навигации с помощью мыши вместо полос прокрутки сделает данные вашей таблицы более удобными и доступными. Поэкспериментируйте с этими подходами и выберите тот, который лучше всего подходит для вашего конкретного случая использования. Не забывайте учитывать такие факторы, как объем данных, требования к производительности и желаемый уровень интерактивности для вашей таблицы.