我一直在努力让 Ag-Grid 的外部过滤响应状态变化。当我更新 isExternalFiltered
,isExternalFiltered
的值在 doesExternalFilterPass
回调不会改变。如果我向网格提供一个键来强制它重新呈现每个更新,它似乎可以工作,但它会导致昂贵的网格重新初始化。
我还要注意,我尝试调用网格 api 的 onFilterChanged
过滤器更改时的方法,但这似乎没有任何效果。
文档似乎没有任何使用 React(或任何框架,就此而言)进行外部过滤的示例,所以我开始怀疑它是否不受支持?
const Grid = () => {
const [gridData, setGridData] = useState([]);
const [columnDefs, setColumnDefs] = useState([]);
const [isExternalFiltered, setExternalFiltered] = useState(false);
/*
Omitted for brevity
*/
return (
<div className="ag-theme-material">
<AgGridReact
// omitted for brevity
columnDefs={columnDefs}
rowData={gridData}
isExternalFilterPresent={() => true}
doesExternalFilterPass={node => {
return isExternalFiltered
? filterFunction(node.data)
: true;
}}
/>
</div>
);
};
最佳答案
有点晚了,但今天早上我遇到了类似的问题,我将发布我发现的内容,以帮助将来解决同样问题的人。发生这种情况是因为 ag-grid React 从不更新 isExternalFilterPresent
的回调。 .我通过将回调存储在一个变量中来确认这一点,导致网格重新呈现,然后检查回调中的 isExternalFilterPresent
。从 gridApi 获得的 gridOptions 内部。这两个回调始终相同,这意味着您的回调 isExternalFilterPresent
的任何值, close over 永远不会更新。解决此问题的方法是对 isExternalFilterPresent
的任何值使用 ref。关闭,因此您始终可以访问最新的值。
关于javascript - Ag-Grid 外部过滤不响应状态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56430096/