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

MUI X Data Grid Premium v6:updateRows更新后过滤未同步生效求助

问题分析与解决方案

可能原因

apiRef.current.updateRows() 虽会立即更新UI,但Data Grid的筛选器内部缓存可能未同步完成,尤其是在更新后立即触发筛选时,内部状态的同步流程可能还未走完。另外也需要确认你的更新操作是否符合Data Grid的行更新规范。

具体解决步骤

1. 确保updateRows调用符合规范

更新行时必须传入带唯一id字段的行对象,Data Grid依赖id定位和更新行:

// 正确示例:每行必须包含id
apiRef.current.updateRows([
  { id: 1, name: "更新后的名称" },
  { id: 2, age: 30 }
]);

2. 等待updateRows完成后再触发筛选

updateRows返回Promise,可等待它执行完成后再进行筛选,确保行数据的内部状态完全同步:

// 等待更新完成后再执行筛选操作
await apiRef.current.updateRows(updatedRows);
// 此处再触发筛选(比如调用GridToolBarFilterButton的逻辑或手动调用筛选API)

3. 手动触发筛选缓存刷新

若等待Promise仍无效,可在更新后手动调用筛选器的刷新方法,强制重新计算筛选结果:

apiRef.current.updateRows(updatedRows).then(() => {
  // 强制刷新筛选器缓存
  apiRef.current.filterApi.refresh();
});

4. 检查自定义筛选逻辑(如果有)

如果使用了自定义筛选函数,确保函数未缓存旧数据,而是基于当前行的最新数据判断:

// 错误示例:依赖未同步的缓存数据
const customFilter = useCallback((value, row) => {
  return cachedOldData.includes(row.id);
}, []);

// 正确示例:基于最新状态数据判断
const customFilter = useCallback((value, row) => {
  return latestData.current.includes(row.id);
}, [latestData]);

排查是否为Bug

若以上步骤都无效,建议创建最小化复现demo:

  • 只保留Data Grid、updateRows按钮和筛选器的核心逻辑
  • 测试是否能稳定复现问题
  • 若能复现,可在MUI X的GitHub仓库提交Issue,附带复现代码和版本信息

内容的提问来源于stack exchange,提问作者Juan Portillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:36:05