Definiowanie kolumn i renderowanie wierszy
Konfigurować definicje kolumn za pomocą accessorów, nagłówków i rendererów komórek, aby wyświetlać dane
Definiowanie kolumn i renderowanie wierszy to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Typ ColumnDef
Każda kolumna w TanStack Table jest opisana obiektem ColumnDef. Dwa najważniejsze pola to accessorKey (nazwa właściwości w obiekcie danych) oraz header (ciąg znaków z etykietą kolumny lub funkcja renderująca).
Podejście z accessorKey idealnie nadaje się do płaskich danych, natomiast złożone lub obliczane wartości wymagają accessorFn.
accessorKey vs accessorFn
Gdy dane mają bezpośrednią właściwość, taką jak name lub email, należy użyć accessorKey: 'name'. Gdy trzeba obliczyć wartość, na przykład połączyć firstName i lastName, należy użyć accessorFn: row => row.firstName + ' ' + row.lastName.
Oba rozwiązania są w pełni typowane po podaniu generyku danych wiersza dla ColumnDef.
Niestandardowe renderowanie komórek za pomocą cell
Pole cell w obiekcie ColumnDef przyjmuje funkcję, która otrzymuje kontekst komórki i zwraca JSX. W ten sposób można renderować w komórce odznaki, przyciski, obrazy lub dowolny niestandardowy interfejs.
W przypadku zwykłych wartości tekstowych wystarczy cell.renderValue(). Przy bogatszej zawartości należy wyodrębnić potrzebne informacje z cell.getContext().
Tworzenie tablicy kolumn
Kolumny należy zdefiniować poza komponentem, aby uniknąć ich ponownego tworzenia przy każdym renderowaniu. Tablicę należy przekazać do useReactTable razem z data i getCoreRowModel.
TypeScript wywnioskuje typy kolumn, gdy podadzą Państwo typ danych dla ColumnDef, zapewniając autouzupełnianie wartości accessorKey.
Wyjaśnienie getCoreRowModel
getCoreRowModel to funkcja-fabryka importowana z @tanstack/react-table. Jej wartość zwracaną należy przekazać do useReactTable, aby poinformować instancję, jak tworzyć podstawową listę wierszy z tablicy danych.
Dodatkowe modele wierszy (posortowane, przefiltrowane i podzielone na strony) nakłada się na ten model, przekazując dodatkowe funkcje-fabryki modeli.
Renderowanie thead za pomocą getHeaderGroups
Należy wywołać table.getHeaderGroups() i zmapować wynik, aby wyrenderować thead. Każda grupa nagłówków ma tablicę headers, a każdy nagłówek ma definicję kolumny i identyfikator.
Należy użyć flexRender(header.column.columnDef.header, header.getContext()), aby wyrenderować treść nagłówka, niezależnie od tego, czy jest ona ciągiem znaków, czy funkcją zwracającą JSX.
Renderowanie tbody za pomocą getRowModel
Należy wywołać table.getRowModel().rows i zmapować każdy wiersz na element tr. Następnie trzeba wywołać row.getVisibleCells() i zmapować każdą komórkę na element td.
Należy użyć flexRender(cell.column.columnDef.cell, cell.getContext()), aby wyrenderować zawartość komórki, uwzględniając niestandardowy renderer komórki zdefiniowany w kolumnie.
Narzędzie flexRender
flexRender to funkcja pomocnicza, która przyjmuje komponent React, funkcję zwracającą JSX albo zwykłą wartość i renderuje każdy z tych typów w spójny sposób. Dzięki niej definicje kolumn mogą używać zarówno prostych ciągów znaków, jak i pełnych funkcji renderujących dla nagłówków i komórek.
Ten ujednolicony interfejs API oznacza, że przed renderowaniem nie trzeba sprawdzać typu definicji.
Kontekst komórki i renderValue
cell.renderValue() zwraca surową wartość pobraną przez accessor, sformatowaną jako ciąg znaków. Aby uzyskać większą kontrolę, cell.getContext() udostępnia pełny kontekst renderowania obejmujący wiersz, kolumnę, instancję tabeli i surową wartość.
Niestandardowe renderery komórek używają kontekstu, aby uzyskać dostęp do powiązanych danych wiersza wykraczających poza pojedynczą wartość accessor.
Przypinanie kolumn i meta
Każdy ColumnDef przyjmuje pole meta, w którym można umieszczać dowolne metadane, takie jak isSticky: true lub alignment: 'right'. Dostęp do nich w rendererze uzyskuje się za pośrednictwem column.columnDef.meta.
Do przypinania kolumn z lewej lub prawej strony TanStack Table udostępnia stan przypinania kolumn oraz metody pomocnicze na obiekcie kolumny.
Połączenie wszystkich elementów
Należy zdefiniować tablicę ColumnDef z polami accessorKey, header i opcjonalnym cell. Następnie trzeba wywołać useReactTable z data, columns i getCoreRowModel. Dla thead należy zmapować getHeaderGroups, a dla tbody — getRowModel().rows, używając flexRender do renderowania każdego nagłówka i każdej komórki.
Ta minimalna konfiguracja zapewnia w pełni funkcjonalną tabelę z całkowicie niestandardowym stylowaniem.
accessorKey vs accessorFn
Kiedy w definicji kolumny TanStack Table należy użyć accessorFn zamiast accessorKey?
Podsumowanie lekcji
Kolumny należy definiować za pomocą ColumnDef, używając accessorKey dla bezpośrednich pól lub accessorFn dla wartości obliczanych. Następnie należy przekazać columns i getCoreRowModel do useReactTable, a potem renderować tabelę za pomocą getHeaderGroups dla nagłówków oraz getRowModel().rows dla wierszy treści.
Narzędzie flexRender jednolicie obsługuje zarówno ciągi znaków, jak i funkcje używane w definicjach nagłówków i komórek.
Często zadawane pytania
Czy lekcja „Definiowanie kolumn i renderowanie wierszy” jest bezpłatna?
Tak — pełny tekst „Definiowanie kolumn i renderowanie wierszy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Definiowanie kolumn i renderowanie wierszy”?
Konfigurować definicje kolumn za pomocą accessorów, nagłówków i rendererów komórek, aby wyświetlać dane Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Definiowanie kolumn i renderowanie wierszy”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Filozofia TanStack Table i projektowanie headless
- Definiowanie kolumn i renderowanie wierszy
- Sortowanie, filtrowanie i paginacja
- Wybór wierszy i tabele wirtualizowane