Chakra UI + React Table
This example shows how to build a sortable data table with Chakra UI's table components, and the React Table library.
Imports#
import { Table, Thead, Tbody, Tr, Th, Td, chakra } from '@chakra-ui/react'import { TriangleDownIcon, TriangleUpIcon } from '@chakra-ui/icons'import { useTable, useSortBy } from 'react-table'
Usage#
function DataTable() {const data = React.useMemo(() => [{fromUnit: 'inches',toUnit: 'millimetres (mm)',factor: 25.4,},{fromUnit: 'feet',toUnit: 'centimetres (cm)',factor: 30.48,},{fromUnit: 'yards',toUnit: 'metres (m)',factor: 0.91444,},],[],)const columns = React.useMemo(() => [{Header: 'To convert',accessor: 'fromUnit',},{Header: 'Into',accessor: 'toUnit',},{Header: 'Multiply by',accessor: 'factor',isNumeric: true,},],[],)const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =useTable({ columns, data }, useSortBy)return (<Table {...getTableProps()}><Thead>{headerGroups.map((headerGroup) => (<Tr {...headerGroup.getHeaderGroupProps()}>{headerGroup.headers.map((column) => (<Th{...column.getHeaderProps(column.getSortByToggleProps())}isNumeric={column.isNumeric}>{column.render('Header')}<chakra.span pl='4'>{column.isSorted ? (column.isSortedDesc ? (<TriangleDownIcon aria-label='sorted descending' />) : (<TriangleUpIcon aria-label='sorted ascending' />)) : null}</chakra.span></Th>))}</Tr>))}</Thead><Tbody {...getTableBodyProps()}>{rows.map((row) => {prepareRow(row)return (<Tr {...row.getRowProps()}>{row.cells.map((cell) => (<Td {...cell.getCellProps()} isNumeric={cell.column.isNumeric}>{cell.render('Cell')}</Td>))}</Tr>)})}</Tbody></Table>)}
Many examples from the React Table docs are portable to use Chakra UI's components by converting
<table />
to<Table />
,<td />
to<Td />
, etc.