Selection Feature Guide
Material React Table has a built-in row-selection feature and makes it easy to manage the selection state yourself. This guide will walk you through how to enable row selection and how to customize the selection behavior.
Relevant Props
# | Prop Name | Type | Default Value | More Info Links | |
---|---|---|---|---|---|
1 |
| ||||
No Description Provided... Yet... | |||||
2 |
| ||||
No Description Provided... Yet... | |||||
3 |
|
| |||
No Description Provided... Yet... | |||||
4 |
|
| |||
No Description Provided... Yet... | |||||
5 |
| Material UI Checkbox Props | |||
No Description Provided... Yet... | |||||
6 |
| Material UI Checkbox Props | |||
No Description Provided... Yet... | |||||
7 | |||||
No Description Provided... Yet... | |||||
8 |
|
| |||
No Description Provided... Yet... |
Enable Selection
Selection checkboxes can be enabled with the enableRowSelection
prop.
Manage Selection State
The row selection state is managed internally by default, but more than likely, you will want to have access to that state yourself. If you are not already fully managing the table state, like in this guide, then here is how you can simply get access to the row selection state, specifically.
const [rowSelection, setRowSelection] = useState({});return (<MaterialReactTabledata={data}columns={columns}enableRowSelectiononRowSelectionChange={setRowSelection}state={{ rowSelection }}/>);
Useful Row IDs
By default, the row.id
for each row in the table is simply the index of the row in the table. You can override this and tell Material React Table to use a more useful Row ID with the getRowId
prop. For example, you may want some like this:
<MaterialReactTabledata={data}columns={columns}enableRowSelectiongetRowId={(originalRow) => originalRow.userId}/>
Now as rows get selected, the rowSelection
state will look like this:
{"3f25309c-8fa1-470f-811e-cdb082ab9017": true,"be731030-df83-419c-b3d6-9ef04e7f4a9f": true,...}
This can be very useful when you are trying to read your selection state and do something with your data as the row selection changes.
First Name | Last Name | Age | Address | City | State | |
---|---|---|---|---|---|---|
Dylan | Murray | 22 | 261 Erdman Ford | East Daphne | Kentucky | |
Raquel | Kohler | 18 | 769 Dominic Grove | Columbus | Ohio |
1import React, { FC, useEffect, useMemo, useState } from 'react';2import MaterialReactTable, { MRT_ColumnDef } from 'material-react-table';3import { RowSelectionState } from '@tanstack/react-table';45const data = [6 {7 userId: '3f25309c-8fa1-470f-811e-cdb082ab9017', //we'll use this as a unique row id8 firstName: 'Dylan',9 lastName: 'Murray',10 age: 22,11 address: '261 Erdman Ford',12 city: 'East Daphne',13 state: 'Kentucky',14 }, //data definitions...25];2627const Example: FC = () => {28 const columns = useMemo(29 //column definitions...58 );5960 //optionally, you can manage the row selection state yourself61 const [rowSelection, setRowSelection] = useState<RowSelectionState>({});6263 useEffect(() => {64 //do something when the row selection changes...65 console.info({ rowSelection });66 }, [rowSelection]);6768 return (69 <MaterialReactTable70 columns={columns}71 data={data}72 enableRowSelection73 getRowId={(row) => row.userId} //give each row a more useful id74 onRowSelectionChange={setRowSelection} //connect internal row selection state to your own75 state={{ rowSelection }} //pass our managed row selection state to the table to use76 />77 );78};7980export default Example;81
Disable Select All
By default, if you enable selection for each row, there will also be a select all checkbox in the header of the checkbox column. It can be hidden with the enableSelectAll
prop.
<MaterialReactTabledata={data}columns={columns}enableSelectAll={false}enableRowSelection/>
Customize Select Checkboxes
The selection checkboxes can be customized with the muiSelectCheckboxProps
prop. Any prop that can be passed to a Mui Checkbox component can be specified here. For example, you may want to use a different color for the checkbox, or use some logic to disable certain rows from being selected.
<MaterialReactTabledata={data}columns={columns}enableRowSelectionmuiSelectCheckboxProps={{color: 'secondary',}}/>
Select | First Name | Last Name | Age | Address | City | State |
---|---|---|---|---|---|---|
Dylan | Murray | 22 | 261 Erdman Ford | East Daphne | Kentucky | |
Raquel | Kohler | 18 | 769 Dominic Grove | Columbus | Ohio | |
Ervin | Reinger | 20 | 566 Brakus Inlet | South Linda | West Virginia | |
Brittany | McCullough | 21 | 722 Emie Stream | Lincoln | Nebraska | |
Branson | Frami | 32 | 32188 Larkin Turnpike | Charleston | South Carolina |
1import React, { FC, useMemo } from 'react';2import MaterialReactTable, { MRT_ColumnDef } from 'material-react-table';34const Example: FC = () => {5 const columns = useMemo(6 () =>7 [8 //column definitions...34 ] as MRT_ColumnDef<typeof data[0]>[],35 [],36 );3738 const data = useMemo(39 () => [40 //data definitions...82 ],83 [],84 );85 return (86 <MaterialReactTable87 columns={columns}88 data={data}89 enableSelectAll={false}90 enableRowSelection91 muiSelectCheckboxProps={({ row }) => ({92 color: 'secondary',93 disabled: row.getValue<number>('age') < 21,94 })}95 />96 );97};9899export default Example;100