Material UI Datatable in React way

Material UI Datatable in React way

Material UI Datatable build in React way

React MaterialUI Datatable

Build Status npm version Conventional Commits

Fully uncontrolled and client-side datatable based on material design. Designed with React philosophy. Just set your data and receive common manipulations on it: filtering, sorting, pagination and etc.

:book: See Storybook of this component

:warning: ATTENTION! WIP!

This library is under the work. It means, that we can do Breaking Changes during one major alpha version. Please, check the CHANGELOG before update your current version.


npm install [email protected] --save-exact


yarn add [email protected] --exact


Edit 9lz52zlylr


import { ReactMUIDatatable } from "react-material-ui-datatable";

const columns = [
    name: "firstName",
    label: "First Name"
    name: "lastName",
    label: "Last Name"
    name: "age",
    label: "Age"
    name: "car.make",
    label: "Car make"

const data = [
  { firstName: "Kylynn", lastName: "Lathey", age: 19, car: { make: "BWM" } },
  { firstName: "Cly", lastName: "Dukelow", age: 46,  car: { make: "Mitsubishi" } },
  { firstName: "Afton", lastName: "Chaffer", age: 34,  car: { make: "Audi" } },
  { firstName: "Deva", lastName: "Cowope", age: 22 car: { make: "Reno" } }

<ReactMUIDatatable title={"Awesome list"} data={data} columns={columns} />;

For more details see Storybook of this component

ReactMUIDatatable's API


Name Type Default Description
title string "" Title of your table
columns Object[] [] Options for each column. Detailed description see here
data Object[] [] Your dataset, that you want to display in the table
page number 0 Current page. Start with 0
perPage number 5 Quantity of displaying items per page.
perPageOption number[] [5, 10, 15] Per page option. Displayed on the paging panel
selectedData Object[] [] Array of refs of selected data items. For example, [data[0], data[1]] will select first and second row.
selectable boolean true Enable selections
filterable boolean true Enable filters in toolbar panel
searchable boolean true Enable search bar in toolbar panel
toolbarSelectActions Function defaultToolbarSelectActions Function that returns a string or React component. Used as display actions in Toolbar selection. More details you can read here. You can see example in storybook at section Props -> toolbarSelectActions
toolbarActions Function Function that returns a string or React component. Used to display custom actions in toolbar panel.
showSearchBar boolean false Open or close search bar in toolbar panel
searchValue string "" The value by which the search is performed
sort Object { [columnName]: null, direction: "ASC" } Set sorting by column name and set direction for sorting. Direction may be: ASC and DESC
filterValues Object {} Set filters for columns
onStateChanged Function Handler for state changing. Receives event-like object. Signature (event: {name: string, value: string, state: Object}) => any, where name - changed state, value - new value, state - current state of datatable component. Notice, that state contains only changeable values. It useful to restore state after reloading page, for example
localization Object default localization More details you can read here


(data: Object, selectedData: Object[], updateSelectedData: Function, handleDelete: Function) => string | React.Component
Argument Type Description
data Object Current dataset in the table (with applying filters and sort)
selectedData Object[] Current selected data (their refs)
updateSelectedData ( Object[] ) => any Function, that apply new selected data
handleDelete ( Object[] ) => any Function, that delete selected data. For example, you can call it, when you got successful response from your api


Default value
  toolbar: {
    searchAction: 'Search',
    filterAction: 'Filters',
    closeSearch: 'Close search',
  filterLists: {
    title: 'Filter',
    allOption: 'All',
    reset: 'Reset',
  toolbarSelect: {
    selectedData: count => `${count} row(s) selected`,
  pagination: {
    rowsPerPage: 'Rows per page',
    displayedRows: ({ from, to, count }) => `${from}-${to} of ${count}`,
Name Type Default Description
searchAction string 'Search' Label for search button
filterAction string 'Filters' Label for filters button
closeSearch string 'Close search' Label for close button of search bar
Name Type Default Description
title string 'Filter' Label for title of filter menu
allOption string 'All' Label for option 'All' of select controls
reset string 'Reset' Label for reset button of filters
Name Type Default Description
selectedData Function count => `${count} row(s) selected` Function that receives count of selected rows and returns string
Name Type Default Description
rowsPerPage string 'Rows per page' Label for select rows per page
displayedRows Function ({ from, to, count }) => `${from}-${to} of ${count}` Function that receives from, to and count of data elements and returns string

Column option

Name Type Default Description
name string Name associated to your data"s object
label string Display column title
sortable boolean true Enable / disable sorting by column
filterable boolean true Enable / disable filtering by column. false will exclude column from filter panel
searchable boolean true Including / excluding column from search results
customCell Function Function that returns a string or React component. Used as display for body cell. function (value: string, row: Object) => string \| React.Component

ReactMUIDatatableProvider with ReactMUIDatatableRoot component

If you have separate screens for editing, creating, detailing items or you have your own screens, and you want to save state of your datatable between pages, you can lift state of the table higher with ReactMUIDatatableProvider. It receives all props from description ReactMUIDatatable's API. To draw table just use ReactMUIDatableRoot component. It's already connect to Provider and will receive all props, that was passed into ReactMUIDatatableProvider. See example below.


Soon here will be link to example. Sorry :(


  • - all stubs was generated by this service

Github Repository

Tags: #React #UI