برنامه نویسی

جدول Tanstack – یادگیری سریع

جدول واکنشهای اساسی

نمونه ای از یک جدول واکنش ایجاد کنید.

const BasicTable = () => {
    ......
    ...

    const table = useReactTable({ data, columns })

    return (
        <div></div>
    )
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

data داده هایی است که جدول در آن وجود دارد. ستون ها باید بر اساس آنچه در جدول قرار دارد تعریف شود. در زیر نحوه تعریف ستون ها در زیر آمده است.

const columns = [
    {
      header: "ID",
      accessorKey: "id",
      footer: "ID",
    },
    {
      header: "First Name",
      accessorKey: "first_name",
      footer: "First Name",
    },
    {
      header: "Last Name",
      accessorKey: "last_name",
      footer: "Last Name",
    },
    ......
    ...
]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کاری که هر خاصیت انجام می دهد:

  • header: این عنوان ستون را که در بالای جدول ظاهر می شود ، تعریف می کند. این همان چیزی است که کاربران به عنوان نام ستون می بینند.

  • accessorKey: این کلید مورد استفاده برای استخراج داده ها از شیء هر ردیف است. این جدول را می گوید که کدام ویژگی از مجموعه داده شما باید در این ستون نمایش داده شود. بنابراین ، accessorKey باید با نام دقیق ویژگی در اشیاء داده خود مطابقت داشته باشد.

  • footer: شبیه به header، اما متنی را که در پایین ستون به عنوان یک پاورقی ظاهر می شود ، تعریف می کند.

جدول ارائه در JSX:

<table>
  <thead>
    {table.getHeaderGroups().map((headerGroup) => (
      <tr key={headerGroup.id}>
        {headerGroup.headers.map((header) => (
          <th key={header.id}>
            {flexRender(header.column.columnDef.header, header.getContext())}
          </th>
        ))}
      </tr>
    ))}
  </thead>
  <tbody>
    ...
  </tbody>
  <tfoot></tfoot>
</table>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا وجود دارد headerGroups؟ به طور معمول ، وقتی ستون های ساده را تعریف می کنید ، فقط یک ردیف هدر وجود دارد. با این حال ، اگر شما ستونهای گروهی در زیر ستون والدین ، ​​جدول React چندین ردیف هدر ایجاد می کند.

چه می کند header.getContext() اینجا انجام دهید؟ header.getContext() یک شیء را ایجاد می کند که حاوی اطلاعات مفیدی در مورد ستون و جدول باشد. سپس این شیء زمینه به آن منتقل می شود flexRender()، اجازه می دهد تا به درستی هدر را ارائه دهد.

چرا است header.getContext() لازم است؟

  • در react-tableبا header.column.columnDef.header می تواند:
1. **A string** (e.g., `"Name"` → just displayed as-is).

2. **A function** (e.g., `({ column }) => {`[`column.id`](http://column.id)`} Column` → needs context to work).
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • اگر header است عمل، به یک استدلال نیاز دارد (getContext() این استدلال را ارائه می دهد).

  • flexRender() این عملکرد را می گیرد و آن را صدا می کند با زمینه لازمبشر

ردیف ها و سلول ها

<table>
   <thead>
       ...
   </thead>
   <tbody>
   {table.getRowModel().rows.map((row) => (
      <tr key={row.id}>
        {row.getVisibleCells().map((cell) => (
          <td key={cell.id}>
            {flexRender(cell.column.columnDef.cell, cell.getContext())}
          </td>
        ))}
      </tr>
    ))}
   </tbody>
   <tfoot>
   </tfoot>
</table>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اینگونه است که می توانید داده ها را ارائه دهید. اما داده ها فقط هنگامی ارائه می شوند که GetCorerOwModel در جدول نمونه تنظیم شود:

// import { getCoreRowModel } from "@tanstack/react-table"

const table = useReactTable({
  data,
  columns,
  getCoreRowModel: getCoreRowModel(),
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پا

<tfoot>
  {table.getFooterGroups().map((footerGroup) => (
    <tr key={footerGroup.id}>
      {footerGroup.headers.map((header) => (
        <th key={header.id}>
          {flexRender(header.column.columnDef.footer, header.getContext())}
        </th>
      ))}
    </tr>
  ))}
</tfoot>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ارائه سلول سفارشی

const columns = [
    ......
    ...
    {
      header: "Date of Birth",
      accessorKey: "dob",
      footer: "Date of Birth",
      cell: (info) =>
        DateTime.fromISO(info.getValue()).toLocaleString(DateTime.DATE_MED),
    },
  ]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اصل ، اینگونه است که می توانید سلول ها را سفارشی کنید.

پارامتر عملکرد شیء است که می توانید تمام اطلاعات مربوط به سلول خاص را داشته باشید.

عملکرد دسترسی – AccessOrfn

accessorKey یک خاصیت با ارزش استاتیک است. اما به جای ارزش استاتیک ، ما می توانیم با ارزش پویا با آن داشته باشیم accessorFn

const columns = [
  {
    header: "ID",
    accessorKey: "id",
    footer: "ID",
  },
  {
    header: "Name",
    accessorFn: (row) => `${row.first_name} ${row.last_name}`, // accessor function
    footer: "Name",
  },
  // {
  //   header: "First Name",
  //   accessorKey: "first_name",
  //   footer: "First Name",
  // },
  // {
  //   header: "Last Name",
  //   accessorKey: "last_name",
  //   footer: "Last Name",
  // },
]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

گروه های هدر با ستون های کودک

const columns = [
  {
    header: "ID",
    accessorKey: "id",
    footer: "ID",
  },
  {
    header: "Name",
    columns: [
      {
        header: "First",
        accessorKey: "first_name",
        footer: "First Name",
      },
      {
        header: "Last",
        accessorKey: "last_name",
        footer: "Last Name",
      },
    ],
  },
  ......
  ...
];
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا ، این 2 لایه گروه هدر ایجاد می کند. این مانند گروه اول قرار می گیرد ، جیب را ایجاد می کند ID وت Nameبشر گروه دوم نیز قرار است ID و بعد First وت Lastبشر به این ترتیب به هدف ما خدمت نمی کند. بنابراین ، آنها را از این طریق ارائه دهید:

<thead>
  {table.getHeaderGroups().map((headerGroup) => (
    <tr key={headerGroup.id}>
      {headerGroup.headers.map((header) => (
        <th key={header.id}>
          {header.isPlaceholder
            ? null
            : flexRender(header.column.columnDef.header, header.getContext())}
        </th>
      ))}
    </tr>
  ))}
</thead>;

/*
Parent HeaderGroup > -- Name
Child_ HeaderGroup > ID First Last
*/
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

Name هدر دارای ستون های کودک است. این ستون های کودک با هدرهایی که ستون کودک ندارند ادغام می شوند.

بنابراین ، در گروه هدر اول ، متغیرها وجود خواهند داشت. متغیرهای موجود در کد دارای مقادیر تهی خواهند بود.

صفحه بندی

برای داشتن صفحه بندی ، اولین شرایطی که باید تنظیم کنید getPaginationRowModel در useReactTable هدف هوک

const table = useReactTable({
  data,
  columns,
  getCoreRowModel: getCoreRowModel(),
  getPaginationRowModel: getPaginationRowModel(),
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون ، دکمه های صفحه بندی را درست بعد از عناصر جدول اضافه کنید:


حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این رویدادهای دکمه ای کاملاً توضیحی هستند.

به این ترتیب یک درگیری ایجاد می کند. درگیری در شرایطی است که هیچ داده ای وجود ندارد ، باز هم سعی می کند داده های بعدی را بدست آورد و بدیهی است که هیچ داده ای یا خالی نشان نمی دهد. بنابراین ، غیرفعال کردن دکمه ها در چنین مواردی راه حل است.

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این روشها نیز بسیار توضیحی هستند.

مرتب سازی

اول از همه مجموعه getSortedRowModelبشر

اکنون ، حالت مرتب سازی را تنظیم کنید (state دارایی پس از getSortedRowModel).

سپس ، بعد از هر مقدار هدر ، علامت صعودی و نزولی را تنظیم کنید.

سپس ، اضافه کنید onClick={header.column.getToggleSortingHandler()} در هدر برای تغییر مرتب سازی.

const [sorting, setSorting] = useState([]);

const table = useReactTable({
  data,
  columns,
  getCoreRowModel: getCoreRowModel(),
  getPaginationRowModel: getPaginationRowModel(),
  getSortedRowModel: getSortedRowModel(),
  state: {
    sorting: sorting,
  },
  onSortingChange: setSorting,
});

return (
  <div>
    <table>
      <thead>
        {table.getHeaderGroups().map((headerGroup) => (
          <tr key={headerGroup.id}>
            {headerGroup.headers.map((header) => (
              <th
                key={header.id}
                onClick={header.column.getToggleSortingHandler()}
              >
                {header.isPlaceholder ? null : (
                  <div>
                    {flexRender(
                      header.column.columnDef.header,
                      header.getContext()
                    )}
                    {
                      { asc: "", desc: "" }[
                        header.column.getIsSorted() ?? null
                      ]
                    }
                  </div>
                )}
              </th>
            ))}
          </tr>
        ))}
      </thead>
    </table>
  </div>
);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جدول Tanstack از “ASC” و “DESC” به طور پیش فرض برای مرتب سازی استفاده می کند. بنابراین ، مکانیسم مرتب سازی در اینجا بسیار مستقیم است.

تصفیه

تنظیم کردن getFilteredRowModel()با

const table = useReactTable({
  ......
  ...,
  getFilteredRowModel: getFilteredRowModel(),
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا ، ما باید حالت فیلتر را نیز تنظیم کنیم.

const [filtering, setFiltering] = useState('')

const table = useReactTable({
  ......
  ...,
  state: {
      ...,
      globalFilter: filtering
  },
  onGlobalFiltering: setFiltering
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این تنظیمات GlobalFilter یک مکانیسم جستجو برای جدول داده ها ایجاد می کند.

اکنون ، یک ورودی جستجو را درست قبل از جدول اضافه کنید:

<>
  <input
    type="text"
    value={filtering}
    onChange={(e) => setFiltering(e.target.value)}
  />
  <table></table>
</>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا