You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Material React Table(v3)遵循行选择示例致复选框失效

问题

按照Material React Table的行选择示例实现后,添加onRowSelectionChange: setRowSelection后点击复选框无法选中,移除该行代码则恢复正常,推测是rowSelection状态未正确回传给表格导致重渲染异常。

相关代码

type TableProps<T extends MRT_RowData> = {
  tablePropsObj: MRT_TableOptions<T>;
};

const Table = <T extends MRT_RowData>(props: TableProps<T>) => {
  const [pagination, setPagination] = useState({
    pageIndex: 0,
    pageSize: 10,
  });

  const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});
  
  const updatedTablePropsObj: MRT_TableOptions<T> = {
    enableColumnActions: false,
    enableRowSelection: true,
    enableSelectAll: true,
    enableTopToolbar: true,
    enableToolbarInternalActions: true,
    enableBottomToolbar: true,
    enablePagination: true,
    manualPagination: true,
    manualFiltering: true,
    positionPagination: 'bottom',
    onPaginationChange: setPagination,
    onRowSelectionChange: setRowSelection,
    ...props.tablePropsObj,
    state: {
      pagination,
      rowSelection,
    },
  }
  const table = useMaterialReactTable(updatedTablePropsObj);
  return (
    <>
      <MaterialReactTable table={table} />
    </>
  );
};
解决方案

问题根源在于对象展开的顺序错误:...props.tablePropsObj放在了自定义配置之后,导致传入的tablePropsObj会覆盖你后续定义的state、onRowSelectionChange等关键配置。

调整对象展开顺序,把...props.tablePropsObj放在最前面,再覆盖自定义的配置项,这样你的状态和回调不会被外部传入的属性覆盖:

type TableProps<T extends MRT_RowData> = {
  tablePropsObj: MRT_TableOptions<T>;
};

const Table = <T extends MRT_RowData>(props: TableProps<T>) => {
  const [pagination, setPagination] = useState({
    pageIndex: 0,
    pageSize: 10,
  });

  const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});
  
  const updatedTablePropsObj: MRT_TableOptions<T> = {
    //先展开外部传入的属性
    ...props.tablePropsObj,
    //再定义自定义配置,覆盖外部传入的同名属性
    enableColumnActions: false,
    enableRowSelection: true,
    enableSelectAll: true,
    enableTopToolbar: true,
    enableToolbarInternalActions: true,
    enableBottomToolbar: true,
    enablePagination: true,
    manualPagination: true,
    manualFiltering: true,
    positionPagination: 'bottom',
    onPaginationChange: setPagination,
    onRowSelectionChange: setRowSelection,
    state: {
      pagination,
      rowSelection,
    },
  }
  const table = useMaterialReactTable(updatedTablePropsObj);
  return (
    <>
      <MaterialReactTable table={table} />
    </>
  );
};

这样修改后,rowSelection状态会正确绑定到表格,onRowSelectionChange也能正常更新状态,复选框选中功能即可恢复正常。

内容的提问来源于stack exchange,提问作者Justin tt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:57:25