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

React MUI X DataGrid onSelectionChange未触发/调用问题

解决MUI DataGrid勾选行时onSelectionChange未触发的问题

核心问题分析

你当前的代码中,CommonTable组件直接将父组件的onSelectionChange回调传给了MUI DataGrid的同名属性,但MUI DataGrid的onSelectionChange回调参数并非直接是选中ID数组,而是包含selectionModel属性的对象。这导致你的handleRowSelectionChange接收的参数不符合预期,看起来像是回调未触发。

具体修复步骤

1. 修正CommonTable组件中DataGrid的回调逻辑

修改CommonTable内的DataGrid配置,正确提取选中的ID数组并传递给父组件:

const CommonTable: React.FC<CommonTableProps> = ({ rows, columns, onSelectionChange }) => {
    return (
        <div style={{ marginTop: '100px', marginLeft: '200px', padding: '20px' }}>
            <DataGrid
                rows={rows}
                columns={columns}
                pageSize={5}
                rowsPerPageOptions={[5]}
                checkboxSelection
                // 修正:从params中提取selectionModel传递给父组件
                onSelectionChange={(params) => onSelectionChange(params.selectionModel as number[])}
            />
        </div>
    );
};

2. 确保行数据的唯一标识字段正确

MUI DataGrid默认使用id作为行的唯一标识,若你的ContactPerson对象的ID字段不是id(比如contactId),需要手动配置getRowId属性:

<DataGrid
    // 其他属性不变
    getRowId={(row) => row.id} // 替换为你的行数据实际ID字段
/>

如果ID字段不匹配,DataGrid无法正确跟踪选中状态,也会导致回调异常。

3. 验证父组件回调逻辑

确认Contact组件中的handleRowSelectionChange逻辑正确,参数类型匹配:

const handleRowSelectionChange = (selectionModel: number[] ) => {
    setSelectedIds(selectionModel);
    console.log("Selected IDs:", selectionModel);
};

完成以上修改后,勾选表格行时onSelectionChange回调应该能正常触发,selectedIds也会正确更新选中的ID列表。

内容的提问来源于stack exchange,提问作者Hard Worker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:50:25