MRT logoMaterial React Table

Row Virtualization Example

Material React Table has a built-in row virtualization feature (via @tanstack/react-virtual) that allows you to render a large number of rows without major performance issues that you would normally see with a large number of DOM elements.

Try out the performance of the table below with 10,000 rows! Filtering, Search, and Sorting also maintain usable performance.

Be sure to also check out the full virtualization feature guide docs to learn about both Row and Column Virtualization.

NOTE: You should only enable row virtualization if you have a large number of rows or columns. Depending on the size of the table, if you are rendering fewer than a couple dozen rows at a time, you will actually just be adding extra overhead to the table renders. Virtualization only becomes necessary when you have over 50 rows or so at the same time with no pagination or dozens of columns.

More Examples
1CasimerChelseyBlandaTyrel.OHara-Runolfsdottir@gmail.com954 Zboncak Heights09744-9046PittsburgSouth DakotaLiberia
2MarjorieJulianneWalshNatalia_OConnell@hotmail.com9416 Water Street23729-8669LeannachesterLouisianaChad
3OttilieCarterBartolettiAlanis42@gmail.com2643 Nikko Mews93039AdafieldWyomingAustria
4BartUlicesRunolfsdottirArdith91@yahoo.com643 Madison Avenue41261-1855New MyronsteadAlabamaMongolia
5FritzIrvingCasperFredrick.Swaniawski72@yahoo.com9581 Zemlak Bridge86265EzralandOhioSaint Kitts and Nevis
6ElenaHalleHeller-EffertzLiza55@hotmail.com474 Colt Divide22618NicolastownConnecticutDenmark
7IsacTiaraD'AmoreAlessandra_Orn@yahoo.com236 Johns Hollow59455North LeathastadKentuckyCape Verde
8PaulineCamrenGulgowskiMina.Rau30@gmail.com160 Goodwin Grove32219-2319PatienceburghOhioEl Salvador
9SaulEvalynLittleWinfield_Carter66@gmail.com74325 Ward Corners15039-4707NarcisoboroughGeorgiaDenmark
10BeaulahJoeyKuhlmanAshley_Swaniawski@hotmail.com640 Vernie Station15323-9753JonvilleUtahSwitzerland
11KarlieMauricioBeattyIsaiah.Roberts@gmail.com4264 Camilla Spring02035North JaynefurtMaineAndorra
12MistyKaitlynHayesZelma_Gulgowski@gmail.com927 Altenwerth Loaf01939PleasantonNorth CarolinaSeychelles
13BlancaOmaBergeLeila_Klocko@hotmail.com2378 Steuber Crescent48161-0518New FrancostadOhioParaguay
14RavenKurtLangworthBrenden.Hilpert8@gmail.com8256 Atlantic Avenue75920TallahasseeWyomingIran
15RasheedPamelaDurganErnie.Spencer@gmail.com154 Raynor Manor09131-3384GreenboroRhode IslandComoros

Source Code

1import { useEffect, useMemo, useRef, useState } from 'react';
2import {
3 MaterialReactTable,
4 useMaterialReactTable,
5 type MRT_ColumnDef,
6 type MRT_SortingState,
7 type MRT_RowVirtualizer,
8} from 'material-react-table';
9import { makeData, type Person } from './makeData';
10
11const Example = () => {
12 const columns = useMemo<MRT_ColumnDef<Person>[]>(
13 //column definitions...
58 );
59
60 //optionally access the underlying virtualizer instance
61 const rowVirtualizerInstanceRef = useRef<MRT_RowVirtualizer>(null);
62
63 const [data, setData] = useState<Person[]>([]);
64 const [isLoading, setIsLoading] = useState(true);
65 const [sorting, setSorting] = useState<MRT_SortingState>([]);
66
67 useEffect(() => {
68 if (typeof window !== 'undefined') {
69 setData(makeData(10_000));
70 setIsLoading(false);
71 }
72 }, []);
73
74 useEffect(() => {
75 //scroll to the top of the table when the sorting changes
76 try {
77 rowVirtualizerInstanceRef.current?.scrollToIndex?.(0);
78 } catch (error) {
79 console.error(error);
80 }
81 }, [sorting]);
82
83 const table = useMaterialReactTable({
84 columns,
85 data, //10,000 rows
86 enableBottomToolbar: false,
87 enableGlobalFilterModes: true,
88 enablePagination: false,
89 enableRowNumbers: true,
90 enableRowVirtualization: true,
91 muiTableContainerProps: { sx: { maxHeight: '600px' } },
92 onSortingChange: setSorting,
93 state: { isLoading, sorting },
94 rowVirtualizerInstanceRef, //optional
95 rowVirtualizerOptions: { overscan: 5 }, //optionally customize the row virtualizer
96 });
97
98 return <MaterialReactTable table={table} />;
99};
100
101export default Example;
102

View Extra Storybook Examples