TanStackIntermediate
TanStack Table — Headless Power
useReactTable-এর মূল ধারণা — data, columns, row model — বাংলায়।
6টি অংশবাংলা ভাষায়
TanStack Table হলো headless table library — এটি নিজে কোনো UI দেয় না, বরং state/logic দেয়; মার্কআপ আপনি করেন। ফলে আপনার styling-এর সম্পূর্ণ নিয়ন্ত্রণ থাকে (যেমন shadcn-এর table)।
useReactTable basics
product-table.tsx (core)tsx
tsx
"use client";
import { useReactTable, flexRender,
getCoreRowModel } from "@tanstack/react-table";
import {
Table, TableBody, TableCell,
TableHead, TableHeader, TableRow,
} from "@/components/ui/table";
interface ProductTableProps {
data: Product[];
columns: ColumnDef<Product>[];
}
export function ProductTable({ data, columns }: ProductTableProps) {
const table = useReactTable({
data,
columns,
getCoreRowModel: getCoreRowModel(),
});
return (
<Table>
<TableHeader>
{table.getHeaderGroups().map((headerGroup) => (
<TableRow key={headerGroup.id}>
{headerGroup.headers.map((header) => (
<TableHead key={header.id}>
{header.isPlaceholder
? null
: flexRender(
header.column.columnDef.header,
header.getContext()
)}
</TableHead>
))}
</TableRow>
))}
</TableHeader>
<TableBody>
{table.getRowModel().rows.map((row) => (
<TableRow key={row.id}>
{row.getVisibleCells().map((cell) => (
<TableCell key={cell.id}>
{flexRender(
cell.column.columnDef.cell,
cell.getContext()
)}
</TableCell>
))}
</TableRow>
))}
</TableBody>
</Table>
);
}flexRender কেন
flexRender TanStack-এর render helper — column-এ লেখা header/cell (string, function বা component) যাই হোক, এটিকে সঠিক context-সহ render করে। بدون এটি অনেক constructor detail হাতে করতেন।
Table generic
ProductTable এখানে generic-না-বানানো keep করলাম (কেবল Product)। দরকার হলে <T> generic বানাতে পারেন — কিন্তু প্রথমে concrete ভালো, complexity পিছনে।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।