React Ag Grid是否存在数据加载完成时触发的内置事件?
React Ag Grid 数据加载完成事件及rowData为null问题解决
内置数据加载完成相关事件
React Ag Grid 提供了多个与数据加载相关的内置事件,其中最可靠的确认数据已完全加载并渲染完成的事件是:
modelUpdated:每当网格的数据模型完成更新(包括首次加载rowData、数据批量替换、分页切换、过滤/排序操作后)时触发,此时可以确保网格已处理完所有行数据,能正常获取到完整的rowData。rowDataChanged:当rowData被整体替换时触发(比如通过api.setRowData()或修改组件的rowDataprop),但注意这个事件触发时数据可能还未完成渲染,若要依赖渲染后的状态,优先使用modelUpdated。gridReady:网格的DOM结构与API初始化完成时触发,此时可获取到grid API,但rowData可能还未传入或处理,不适合直接执行依赖完整rowData的逻辑。
解决rowData为null的问题
你遇到的params.rowdata为null的情况,通常是因为在数据未完成加载/渲染时就执行了依赖rowData的函数。可以通过以下方式解决:
- 监听
modelUpdated事件执行业务逻辑
在该事件的回调中,通过params.api.getRowData()获取完整的已加载数据,再执行你的业务函数,确保数据已准备就绪。示例代码:import { AgGridReact, useGridApiRef } from 'ag-grid-react'; const YourGridComponent = () => { const gridApiRef = useGridApiRef(); const handleModelUpdated = (params) => { const fullRowData = params.api.getRowData(); if (fullRowData.length > 0) { // 执行需要依赖完整rowData的函数 yourTargetFunction(fullRowData); } }; const handleGridReady = (params) => { // 异步加载数据并设置给网格 fetch('/your-data-api') .then(res => res.json()) .then(data => params.api.setRowData(data)); }; return ( <div className="ag-theme-alpine" style={{ height: 400 }}> <AgGridReact apiRef={gridApiRef} onGridReady={handleGridReady} onModelUpdated={handleModelUpdated} columnDefs={yourColumnDefinitions} /> </div> ); }; - 避免异步数据加载的竞态问题
如果存在多个并行的数据请求,可能导致rowData被多次覆盖或加载顺序混乱。可以通过取消之前的请求(如使用AbortController)或只保留最后一次请求的结果,确保网格最终使用的是正确的完整数据。
内容的提问来源于stack exchange,提问作者Mason Stevens
相关产品推荐
相关产品推荐

