TypeScript icon, indicating that this package has built-in type declarations

    5.3.2 • Public • Published


    A React table component.


    Travis Coverage Status


    • Support virtualized.
    • Support fixed header, fixed column.
    • Support custom adjustment column width.
    • Support for custom cell content.
    • Support for displaying a tree form.
    • Support for sorting.
    • Support for expandable child nodes
    • Support for RTL


    • Fixed Column

    • Custom Cell

    • Tree Table

    • Expandable

    More Examples


    npm i rsuite-table --save


    import { Table, Column, HeaderCell, Cell } from 'rsuite-table';
    import 'rsuite-table/lib/less/index.less'; // or 'rsuite-table/dist/css/rsuite-table.css'
    const dataList = [
      { id: 1, name: 'a', email: '', avartar: '...' },
      { id: 2, name: 'b', email: '', avartar: '...' },
      { id: 3, name: 'c', email: '', avartar: '...' }
    const ImageCell = ({ rowData, dataKey, }) => (
      <Cell {}>
        <img src={rowData[dataKey]} width="50" />
    const App = () => (
      <Table data={dataList}>
        <Column width={100} sortable fixed resizable>
          <Cell dataKey="id" />
        <Column width={100} sortable resizable>
          <Cell dataKey="name" />
        <Column width={100} sortable resizable>
            {(rowData, rowIndex) => {
              return <a href={`mailto:${}`}>{}</a>;
        <Column width={100} resizable>
          <ImageCell dataKey="avartar" />



    Property Type (Default) Description
    affixHeader boolean,number Affix the table header to the specified position on the page
    affixHorizontalScrollbar boolean,number Affix the table horizontal scrollbar to the specified position on the page
    autoHeight boolean Automatic height
    bordered boolean Show border
    cellBordered boolean Show cell border
    data * object[] Table data
    defaultExpandAllRows boolean Expand all nodes By default
    defaultExpandedRowKeys string[] Specify the default expanded row by rowkey
    defaultSortType enum: 'desc', 'asc' Sort type
    expandedRowKeys string[] Specify the default expanded row by rowkey (Controlled)
    headerHeight number(40) Table Header Height
    height number(200) Table height
    hover boolean (true) The row of the table has a mouseover effect
    isTree boolean Show as Tree table
    loading boolean Show loading
    locale object: { emptyMessage: ('No data'), loading: ('Loading...') } Messages for empty data and loading states
    minHeight number (0) Minimum height
    onExpandChange (expanded:boolean,rowData:object)=>void Tree table, the callback function in the expanded node
    onRowClick (rowData:object, event: SyntheticEvent)=>void Click the callback function after the row and return to rowDate
    onRowContextMenu (rowData:object, event: SyntheticEvent)=>void Invoke the callback function on contextMenu and pass the rowData
    onScroll (scrollX:object, scrollY:object)=>void Callback function for scroll bar scrolling
    onSortColumn (dataKey:string, sortType:string)=>void Click the callback function of the sort sequence to return the value sortColumn, sortType
    renderEmpty (info: React.ReactNode) => React.ReactNode Customized data is empty display content
    renderLoading (loading: React.ReactNode) => React.ReactNode Customize the display content in the data load
    renderRow (children?: ReactNode, rowData?: RowDataType) => ReactNode Custom row element
    renderRowExpanded (rowDate?: Object) => React.ReactNode Customize what you can do to expand a zone
    renderTreeToggle (icon:node,rowData:object,expanded:boolean)=> node Tree table, the callback function in the expanded node
    rowClassName string , (rowData:object)=>string Add an optional extra class name to row
    rowExpandedHeight number (100) Set the height of an expandable area
    rowHeight number(46), (rowData: object) => number Row height
    rowKey string ('key') Each row corresponds to the unique key in data
    rtl boolean Right to left
    shouldUpdateScroll boolean,(event)=>({x,y}) (true) Use the return value of shouldUpdateScroll to determine whether to update the scroll after the table size is updated.
    showHeader boolean (true) Display header
    sortColumn string Sort column name ˝
    sortType enum: 'desc', 'asc' Sort type (Controlled)
    virtualized boolean Effectively render large tabular data
    width number Table width


    Property Type (Default) Description
    align enum: 'left','center','right' Alignment
    colSpan number Merges column cells to merge when the dataKey value for the merged column is null or undefined.
    fixed boolean, 'left', 'right' Fixed column
    flexGrow number Set the column width automatically adjusts, when set flexGrow cannot set resizable and width property
    minWidth number(200) When you use flexGrow, you can set a minimum width by minwidth
    onResize (columnWidth?: number, dataKey?: string) => void Callback after column width change
    resizable boolean Customizable Resize Column width
    rowSpan (rowData: any) => number Merges rows on the specified column.
    sortable boolean Sortable
    treeCol boolean A column of a tree.
    verticalAlign enum: 'top', 'middle', 'bottom' Vertical alignment
    width number Column width

    sortable is used to define whether the column is sortable, but depending on what key sort needs to set a dataKey in Cell. The sort here is the service-side sort, so you need to handle the logic in the ' Onsortcolumn ' callback function of <Table>, and the callback function returns sortColumn, sortType values.


    Property Type (Default) Description
    align enum: 'left','center','right' Alignment
    fixed boolean, 'left', 'right' Fixed column
    groupHeaderHeight number The height of the header of the merged cell group. The default value is 50% of the table headerHeight
    header React.ReactNode Group header
    verticalAlign enum: 'top', 'middle', 'bottom' Vertical alignment


    Property Type (Default) Description
    dataKey string Data binding key, but also a sort of key
    rowData object Row data
    rowIndex number Row number

    There are three ways to use <Cell>, as follows:

    • 1.Associate the fields in the data with dataKey.
    <Column width="{100}" align="center">
      <Cell dataKey="name" />
    • 2.Customize a <Cell>.
    const NameCell = ({ rowData, ...props }) => (
      <Cell {...props}>
        <a href={`mailto:${}`}>{}<a>
    <Column width={100} align="center">
      <NameCell />
    • 3.Customize functions directly within the <Cell>.
    <Column width={100} align="center">
        {(rowData, rowIndex) => {
          return <a href={`mailto:${}`}>{}</a>;

    (For nested data read this:


    • scrollTop(top:number = 0)
    • scrollLeft(left:number = 0)




    npm i rsuite-table

    DownloadsWeekly Downloads






    Unpacked Size

    564 kB

    Total Files


    Last publish


    • simonguo