Skip to content

Commit b6c6ee8

Browse files
authored
feat(docs): add TableColumnSetup migration to the migration guide (#133)
1 parent 0ea1159 commit b6c6ee8

4 files changed

Lines changed: 4057 additions & 1447 deletions

File tree

README-ru.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,3 +560,58 @@ const TableSettingsDemo = () => {
560560
```
561561

562562
Подробности о свойствах изменения размера таблиц и их столбцов и можно найти в [статье об API для изменения размера столбцов](https://tanstack.com/table/v8/docs/api/features/column-sizing) документации библиотеки React Table.
563+
564+
## Известные проблемы и совместимость
565+
566+
### Совместимость с React 19 + React Compiler
567+
568+
**⚠️ Известная проблема:** Существует известная проблема совместимости с React 19 и React Compiler при использовании `@gravity-ui/table` (который построен на базе TanStack Table). Таблица может не перерисовываться при изменении данных. Подробности см. в [TanStack Table issue #5567](https://github.com/TanStack/table/issues/5567).
569+
570+
**Обходное решение:**
571+
572+
Если вы используете React 19 с React Compiler и сталкиваетесь с проблемами перерисовки таблицы, вы можете использовать директиву `'use no memo'` в коде вашего компонента:
573+
574+
```tsx
575+
import React from 'react';
576+
import {Table, useTable} from '@gravity-ui/table';
577+
import type {ColumnDef} from '@gravity-ui/table/tanstack';
578+
579+
function MyTable() {
580+
'use no memo'; // Отключить мемоизацию React Compiler для этого компонента
581+
582+
const [data, setData] = React.useState<Person[]>([]);
583+
584+
const table = useTable({
585+
data,
586+
columns,
587+
});
588+
589+
return <Table table={table} />;
590+
}
591+
```
592+
593+
**Альтернативное решение:**
594+
595+
Вы также можете явно мемоизировать экземпляр таблицы или данные, чтобы обеспечить правильную перерисовку:
596+
597+
```tsx
598+
import React from 'react';
599+
import {Table, useTable} from '@gravity-ui/table';
600+
import type {ColumnDef} from '@gravity-ui/table/tanstack';
601+
602+
function MyTable() {
603+
const [data, setData] = React.useState<Person[]>([]);
604+
605+
// Явно мемоизировать данные для обеспечения перерисовки
606+
const memoizedData = React.useMemo(() => data, [data]);
607+
608+
const table = useTable({
609+
data: memoizedData,
610+
columns,
611+
});
612+
613+
return <Table table={table} />;
614+
}
615+
```
616+
617+
**Примечание:** Эта проблема находится в базовой библиотеке TanStack Table и должна быть исправлена там. Приведенные выше обходные решения должны помочь до тех пор, пока не будет доступно исправление.

README.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,3 +560,58 @@ const TableSettingsDemo = () => {
560560
```
561561

562562
Learn more about the table and the column resizing properties in the react-table [docs](https://tanstack.com/table/v8/docs/api/features/column-sizing)
563+
564+
## Known Issues and Compatibility
565+
566+
### React 19 + React Compiler Compatibility
567+
568+
**⚠️ Known Issue:** There is a known compatibility issue with React 19 and React Compiler when using `@gravity-ui/table` (which is built on top of TanStack Table). The table may not re-render when data changes. See [TanStack Table issue #5567](https://github.com/TanStack/table/issues/5567) for details.
569+
570+
**Workaround:**
571+
572+
If you're using React 19 with React Compiler and experiencing issues with table re-rendering, you can use the `'use no memo'` directive in your component code:
573+
574+
```tsx
575+
import React from 'react';
576+
import {Table, useTable} from '@gravity-ui/table';
577+
import type {ColumnDef} from '@gravity-ui/table/tanstack';
578+
579+
function MyTable() {
580+
'use no memo'; // Disable React Compiler memoization for this component
581+
582+
const [data, setData] = React.useState<Person[]>([]);
583+
584+
const table = useTable({
585+
data,
586+
columns,
587+
});
588+
589+
return <Table table={table} />;
590+
}
591+
```
592+
593+
**Alternative Solution:**
594+
595+
You can also explicitly memoize the table instance or data to ensure proper re-renders:
596+
597+
```tsx
598+
import React from 'react';
599+
import {Table, useTable} from '@gravity-ui/table';
600+
import type {ColumnDef} from '@gravity-ui/table/tanstack';
601+
602+
function MyTable() {
603+
const [data, setData] = React.useState<Person[]>([]);
604+
605+
// Explicitly memoize data to ensure re-renders
606+
const memoizedData = React.useMemo(() => data, [data]);
607+
608+
const table = useTable({
609+
data: memoizedData,
610+
columns,
611+
});
612+
613+
return <Table table={table} />;
614+
}
615+
```
616+
617+
**Note:** This issue is in the underlying TanStack Table library and will need to be fixed there. The workarounds above should help until a fix is available.

0 commit comments

Comments
 (0)