Column Ordering (DnD) Feature Guide
Whether you just want to change the default column order in your table or let columns be reordered by dragging and dropping, Material React Table has a simple API for this.
Relevant Props
# | Prop Name | Type | Default Value | More Info Links | |
---|---|---|---|---|---|
1 |
|
| MRT Column Ordering DnD Docs | ||
2 |
| MRT Column Ordering DnD Docs | |||
3 |
| TanStack Table Column Ordering Docs | |||
4 |
| ||||
5 |
| ||||
Relevant Column Options
Relevant State
# | State Option | Type | Default Value | More Info Links | |
---|---|---|---|---|---|
1 |
|
| TanStack Table Column Ordering Docs | ||
2 |
| ||||
3 |
| ||||
Change the Default Column Order
By Default, Material React Table will order the columns in the order they are defined in the columns
prop. And Display Columns such as Actions, Selection, Expansion, etc., get added to either the beginning or the end of the table. You can customize all of this by defining your own columnOrder
State and passing it either to the initialState
or state
props.
The Column Order State is an array of string column ids, that come from the ids or accessorKeys that you defined in your column definitions.
<MaterialReactTabledata={data}columns={columns}enableRowSelectioninitialState={{columnOrder: ['name','email','phone','city','country','mrt-row-select', //move the built-in selection column to the end of the table],}}/>
Manage Column Order State
If you need to manage the columnOrder
state yourself, you can do so in the state
prop and onColumnOrderChange
callback, but you will also need to initialize the columnOrder
state yourself.
const columns = [//...];//easy shortcut to initialize the columnOrder state as array of column idsconst [columnOrder, setColumnOrder] = useState(columns.map((c) => c.accessorKey), //array of column ids);return (<MaterialReactTabledata={data}columns={columns}enableRowSelectionstate={state}onColumnOrderChange={onColumnOrderChange}/>);
Enable Column Ordering with Drag and Drop
Material React Table has a built-in drag and drop feature to reorder columns. This feature is enabled by passing the enableColumnOrdering
prop.
The ability for a column to have a drag and drop handle can be specified by setting the enableColumnOrdering
option on the column.
First Name | Last Name | Address | City | State |
---|---|---|---|---|
Dylan | Murray | 261 Erdman Ford | East Daphne | Kentucky |
Raquel | Kohler | 769 Dominic Grove | Columbus | Ohio |
Ervin | Reinger | 566 Brakus Inlet | South Linda | West Virginia |
Brittany | McCullough | 722 Emie Stream | Lincoln | Nebraska |
Branson | Frami | 32188 Larkin Turnpike | Charleston | South Carolina |
1import React, { FC, useMemo } from 'react';2import MaterialReactTable, { MRT_ColumnDef } from 'material-react-table';3import { data, Person } from './makeData';45const Example: FC = () => {6 const columns = useMemo<MRT_ColumnDef<Person>[]>(7 () => [8 {9 accessorKey: 'firstName',10 header: 'First Name',11 },12 {13 accessorKey: 'lastName',14 header: 'Last Name',15 },16 //column definitions...26 {27 accessorKey: 'state',28 enableColumnOrdering: false, //disable column ordering for this column,29 header: 'State',30 },31 ],32 [],33 );3435 return (36 <MaterialReactTable columns={columns} data={data} enableColumnOrdering />37 );38};3940export default Example;41
View Extra Storybook Examples