rnr-starter
Version:
A comprehensive React Native Expo boilerplate with 50+ modern UI components, dark/light themes, i18n, state management, and production-ready architecture
161 lines (132 loc) • 5.75 kB
Markdown
# Table Component
Оптимизированный переиспользуемый компонент таблицы на основе @tanstack/react-table для React Native приложений.
## Живые примеры
Посмотрите компонент Table в действии:
**Main Page** → **Examples** → **Data Tab** → **Table Examples**
Доступны два типа демонстраций:
- **Simple Table** - базовая реализация таблицы
- **Advanced Table** - продвинутая таблица с фильтрацией и сортировкой
## Особенности
- ✅ Сортировка по колонкам
- ✅ Пагинация
- ✅ Фильтрация данных
- ✅ Оптимизированная производительность с мемоизацией
- ✅ Адаптивный дизайн с горизонтальной прокруткой
- ✅ Поддержка темной темы
- ✅ TypeScript типизация
- ✅ Кастомизация стилей через className
## Базовое использование
```tsx
import { Table } from '~/components/ui/table';
import { ColumnDef } from '@tanstack/react-table';
interface User {
id: number;
name: string;
email: string;
}
const data: User[] = [
{ id: 1, name: 'John Doe', email: 'john@example.com' },
{ id: 2, name: 'Jane Smith', email: 'jane@example.com' },
];
const columns: ColumnDef<User>[] = [
{
accessorKey: 'id',
header: 'ID',
},
{
accessorKey: 'name',
header: 'Name',
},
{
accessorKey: 'email',
header: 'Email',
},
];
export function UserTable() {
return (
<Table
data={data}
columns={columns}
enableSorting={true}
enablePagination={true}
pageSize={10}
/>
);
}
```
## Продвинутое использование с хуком
```tsx
import { useTable } from '~/lib/hooks/useTable';
export function AdvancedUserTable() {
const { tableData, tableActions } = useTable({
data,
columns,
enableSorting: true,
enablePagination: true,
pageSize: 5,
});
return (
<View>
<Table
data={data}
columns={columns}
enableSorting={true}
enablePagination={true}
pageSize={5}
/>
</View>
);
}
```
## Props
### Table Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `data` | `TData[]` | - | Данные для отображения в таблице |
| `columns` | `ColumnDef<TData>[]` | - | Определение колонок |
| `loading` | `boolean` | `false` | Показать индикатор загрузки |
| `enableSorting` | `boolean` | `true` | Включить сортировку |
| `enableFiltering` | `boolean` | `false` | Включить фильтрацию |
| `enablePagination` | `boolean` | `false` | Включить пагинацию |
| `pageSize` | `number` | `10` | Количество строк на странице |
| `className` | `string` | - | CSS класс для контейнера |
| `headerClassName` | `string` | - | CSS класс для заголовков |
| `rowClassName` | `string` | - | CSS класс для строк |
| `cellClassName` | `string` | - | CSS класс для ячеек |
## Оптимизация производительности
Компонент использует несколько техник для оптимизации:
1. **React.useMemo** для мемоизации строк таблицы
2. **Виртуализация** через ScrollView для больших наборов данных
3. **Ленивое вычисление** сортировки и фильтрации
4. **Оптимизированные ре-рендеры** через правильную структуру зависимостей
## Кастомизация стилей
Компонент использует NativeWind/Tailwind CSS для стилизации:
```tsx
<Table
className="border-2 border-blue-500"
headerClassName="bg-blue-100 dark:bg-blue-900"
rowClassName="hover:bg-gray-50 dark:hover:bg-gray-800"
cellClassName="font-medium"
/>
```
## Примеры использования
### Живые демонстрации
- **Navigation**: Main Page → Examples → Data Tab
- [`TableExample.tsx`](../../../examples/components/TableExample.tsx) - Простая таблица с базовой функциональностью
- [`AdvancedTableExample.tsx`](../../../examples/components/AdvancedTableExample.tsx) - Продвинутая таблица с:
- Фильтрацией по статусу
- Поиском по имени и email
- Сортировкой колонок
- Пагинацией
- Управлением статусами
### Файлы компонентов
- **Основной компонент**: [`components/ui/table.tsx`](../table.tsx)
- **Хук для таблиц**: [`lib/hooks/useTable.ts`](../../../lib/hooks/useTable.ts)
- **Типы данных**: [`types.ts`](./types.ts)
### Дополнительные возможности
В примерах показано:
- Интеграция с Zustand store для управления состоянием
- Обработка различных типов данных (строки, числа, даты, статусы)
- Кастомизация внешнего вида с помощью NativeWind/Tailwind
- Responsive дизайн для мобильных устройств
- Оптимизация производительности для больших наборов данных