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

Material UI Data Grid:解决父状态变更致表格刷新问题

解决Material UI Data Grid服务端模式下选中行导致频繁刷新的问题

针对你遇到的选中行时表格频繁刷新的问题,可以尝试以下几个解决方案:

  • 优化选中状态更新逻辑
    默认每次触发onSelectionModelChange都会生成新的数组引用,哪怕选中项没有变化,也会触发父组件state更新进而导致表格重渲染。可以在回调里先做浅比较,只有选中项真的变化时才更新state:

    const handleSelectionModelChange = (newSelection) => {
      // 浅比较当前选中状态与新状态,避免无意义的state更新
      const isSelectionUnchanged = 
        selectionModel.length === newSelection.length &&
        selectionModel.every((id, idx) => id === newSelection[idx]);
      
      if (!isSelectionUnchanged) {
        setSelectionModel(newSelection);
      }
    };
    
  • 对Data Grid组件做memo化处理
    使用React.memo封装Data Grid,让组件只在props真正变化时才重渲染。这样可以过滤掉一些无关的props变化或者相同引用的props传递导致的不必要刷新:

    const MemoizedDataGrid = React.memo(DataGrid);
    

    之后使用<MemoizedDataGrid />替代原组件即可。

  • 确保keepNonExistentRowsSelected的稳定引用
    你已经配置了keepNonExistentRowsSelected={true},要注意不要在渲染过程中动态生成这个值(比如不要写成keepNonExistentRowsSelected={someCondition ? true : false}除非someCondition是稳定的),保持它的静态值传递,避免额外的props变化触发重渲染。

  • 拆分无关的state与props
    检查是否有其他和表格功能无关的props传递给Data Grid,或者父组件中存在其他不必要的state变化导致表格重渲染。尽量只传递表格必需的props(比如rows、columns、selectionModel、分页相关参数等),减少组件的重渲染触发条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:22:11