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

Redux Store数据加载延迟导致AG Grid表格无法填充及编辑后组件不更新的解决方案求助

问题1:Redux数据延迟加载后表格未更新

你当前的updateData只在onGridReady中执行了一次,但onGridReady仅在AG Grid初始化时触发。当Redux中的rules从空变为有效数据时,组件虽然会因为useSelector拿到新值而重渲染,但此时onGridReady不会再次执行,所以rowData状态没有被更新,表格自然不会刷新。

你提到尝试过useEffect但没生效,大概率是依赖项没配置正确。试试下面的修改:

const DisplayRules = () => { 
  const rules = useSelector(({rules}) => rules.data); 
  const dispatch = useDispatch(); 
  const [gridApi, setGridApi] = useState(null); 
  const [gridColumnApi, setGridColumnApi] = useState(null); 
  const [rowData, setRowData] = useState(rules); 

  // 监听rules的变化,自动更新rowData和表格
  useEffect(() => {
    if (rules) {
      setRowData(rules);
      // 如果表格已初始化,直接通过gridApi刷新数据
      gridApi?.setRowData(rules);
    }
  }, [rules, gridApi]); // 必须把rules和gridApi加入依赖项

  const onGridReady = (params) => { 
    setGridApi(params.api); 
    setGridColumnApi(params.columnApi); 
    // 初始化时如果已有数据,直接设置表格数据
    rules && params.api.setRowData(rules);
  }; 

  // 其余代码保持不变...
};

更简洁的方式可以省去中间的rowData状态,直接把rules传给表格的rowData属性:

<AgGridReact
  // ...其他props
  rowData={rules || []} // 用空数组避免初始null导致的渲染问题
  // ...其他props
>

这样只要Redux中的rules更新,表格会自动接收新数据,不用手动维护rowData状态。


问题2:Edit Section修改后组件不自动重渲染

要实现编辑后自动刷新,核心是确保修改操作最终更新了Redux中的rules状态。因为你的组件通过useSelector订阅Redux状态,只要Redux里的rules变化,组件就会自动重渲染,表格也会同步更新。

假设你的EditSection是用来修改单条规则的,在编辑完成后需要dispatch一个action更新Redux中的对应数据,而不是只修改本地数据:

// 在EditSection组件中
const handleSave = (updatedRule) => {
  // dispatch action更新Redux中的rules
  dispatch(updateRule(updatedRule));
};

另外,你当前给cellRendererParams传递gridApi的方式有问题:gridApi是组件状态,当它变化时,cellRenderer不会自动重新初始化(AG Grid的cellRenderer仅在行数据变化时更新)。更好的方式是直接从cellRenderer的params中获取gridApi:

// EditSection组件内部
const EditSection = (props) => {
  // 直接从props.params拿到当前表格的api
  const gridApi = props.params.api;
  
  // 你的编辑逻辑...
};

然后在父组件中去掉cellRendererParams的配置:

<AgGridColumn 
  headerName= "Edit" 
  field="Edit" 
  cellRenderer= 'EditSection'
/>

这样当Redux中的rules更新后,useSelector会拿到新数据,组件重渲染,表格的行数据更新,EditSection也会同步拿到最新的行信息,实现自动刷新。


总结关键要点:

  • 要么用useEffect监听Redux状态变化同步表格数据,要么直接将Redux状态作为表格的rowData
  • 编辑操作必须触发Redux状态更新,依赖Redux的订阅机制触发组件重渲染
  • 避免通过props传递gridApi给cellRenderer,直接从cellRenderer的params中获取更可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:37:32