Blog>
Snippets

Memoization for Optimizing Virtualized Table Performance

Highlight the use of memoization techniques within a TanStack Virtual table to prevent unnecessary re-renders when dealing with large and complex datasets, showcasing a practical implementation of memoization in table row components.
import { useMemo } from 'react';
import { useTable } from '@tanstack/react-table';
First, import the useMemo hook from React, and the useTable hook from @tanstack/react-table to create and manipulate the virtual table.
const data = useMemo(() => [...], [dependencies]);
Use the useMemo hook to memoize the data. This ensures that data isn't recalculated unless the dependencies change, thereby preventing unnecessary re-renders.
const columns = useMemo(() => [...], [dependencies]);
Similarly, memoize the columns of the table. This is crucial for preventing re-renders caused by columns recalculating, which is especially beneficial for performance when dealing with complex column configurations or large datasets.
const tableInstance = useTable({
  columns,
  data
});
Create an instance of the table using the useTable hook from TanStack, passing the memoized data and columns. This instance will be utilized to render the table in your component.
/* Inside your component render method or function */
// Destructure necessary methods and properties from the table instance
const { getTableProps, getTableBodyProps, rows, prepareRow } = tableInstance;

return (
  <table {...getTableProps()}>
    <tbody {...getTableBodyProps()}>
      {rows.map((row) => {
        prepareRow(row);
        return (
          <tr {...row.getRowProps()}>
            {row.cells.map(cell => (
              <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
            ))}
          </tr>
        );
      })}
    </tbody>
  </table>
);
Render the virtualized table using the table instance. This code dynamically renders rows and cells based on the memoized data and columns. Each row is prepared and then rendered, leveraging memoization to optimize performance.