Published on

Material React Table Pagination: A Comprehensive Guide

Authors
  • Name
    Ripal & Zalak
    Twitter

Material React Table Pagination: A Comprehensive Guide

Pagination is an essential feature when working with data tables, especially when managing large datasets. Material React Table (MRT) provides a robust and flexible pagination system to enhance user experience and optimize data management. In this guide, we’ll explore how to configure, customize, and manage pagination in Material React Table.

Why Use Pagination?

Pagination allows users to browse data in chunks rather than loading everything at once. This improves performance and usability by:

  • Reducing memory usage for large datasets.
  • Speeding up data retrieval and rendering.
  • Enhancing the user experience by presenting data in manageable sections.

Material React Table supports both client-side and server-side pagination, catering to various use cases.


Key Features of MRT Pagination

  1. Client-Side Pagination: Enabled by default, it processes data on the client side.
  2. Server-Side Pagination: Fetch data dynamically from a server for large datasets.
  3. Customizable Components: Tailor the appearance and functionality of pagination controls.
  4. State Management: Manage pagination state manually or let MRT handle it internally.

Configuring Pagination in Material React Table

1. Enable/Disable Pagination

To disable pagination entirely, use the enablePagination table option:

const table = useMaterialReactTable({
  columns,
  data,
  enablePagination: false,
  enableBottomToolbar: false, // Hide bottom toolbar
})

2. Customize Initial Pagination State

Set initial pagination state using initialState or manage it manually with state.

Using initialState:

const table = useMaterialReactTable({
  columns,
  data,
  initialState: { pagination: { pageSize: 25, pageIndex: 2 } },
})

Managing State:

const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })

const table = useMaterialReactTable({
  columns,
  data,
  state: { pagination },
  onPaginationChange: setPagination,
})

Customizing Pagination

1. Behavior

  • Auto Reset Page Index: By default, MRT resets the page index when sorting, filtering, or grouping. Set autoResetPageIndex to false to disable this.
  • Paginate Expanded Rows: Use paginateExpandedRows to manage row pagination when sub-rows are expanded.

2. UI Components

Customize the pagination UI using muiPaginationProps or switch to a Material UI Pagination component.

Example:

const table = useMaterialReactTable({
  columns,
  data,
  muiPaginationProps: {
    rowsPerPageOptions: [5, 10, 20],
    showFirstButton: false,
    showLastButton: false,
  },
  paginationDisplayMode: 'pages',
})

Server-Side Pagination

For large datasets, server-side pagination fetches data dynamically based on user interactions.

Example Implementation:

const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })

useEffect(() => {
  const fetchData = async () => {
    const url = `/api/data?page=${pagination.pageIndex}&size=${pagination.pageSize}`
    const response = await fetch(url)
    const result = await response.json()
    setData(result.data)
    setRowCount(result.meta.totalRowCount)
  }
  fetchData()
}, [pagination])

const table = useMaterialReactTable({
  columns,
  data,
  manualPagination: true,
  onPaginationChange: setPagination,
  state: { pagination },
})

Advanced Usage

Combine Pagination with Sorting and Filtering

Material React Table allows seamless integration of pagination with sorting and filtering. Use manualSorting and manualFiltering options to handle these features on the server side.

Example:

const table = useMaterialReactTable({
  columns,
  data,
  manualPagination: true,
  manualSorting: true,
  manualFiltering: true,
  onPaginationChange: setPagination,
  onSortingChange: setSorting,
  onColumnFiltersChange: setFilters,
})

Conclusion

Material React Table’s pagination system is powerful and flexible, catering to both client-side and server-side needs. Whether you’re building a simple application or a robust data dashboard, MRT’s pagination features can help streamline data management and improve performance.

With customizable components, state management, and integration with sorting and filtering, MRT ensures a seamless and efficient experience for both developers and users.

Key Takeaways

  • Use client-side pagination for small datasets.
  • Opt for server-side pagination for large datasets.
  • Customize pagination behavior and UI to match your application’s needs.

Start building your efficient data table with Material React Table today!