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
相关产品推荐
相关产品推荐

