我一直在努力使Ag-Grid的外部过滤响应状态变化。当我更新isExternalFiltered
时,isExternalFiltered
回调中doesExternalFilterPass
的值不会改变。如果我向网格提供了一个密钥来强制它重新呈现每次更新,那么它似乎可以工作,但是会导致昂贵的网格重新初始化。
我还将注意到,当过滤器更改时,我曾尝试调用grid 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>
);
};
答案 0 :(得分:0)
有点晚了,但是今天早上我遇到了一个类似的问题,我将发布我发现可以在将来解决相同问题的人们的东西。发生这种情况是因为ag-grid React从未更新isExternalFilterPresent
的回调。我通过将回调存储在变量中,使网格重新呈现,然后在从gridApi获得的gridOptions内检查isExternalFilterPresent
的回调来确认这一点。这两个回调总是相同的,这意味着您的回调isExternalFilterPresent
关闭的任何值都不会更新。解决此问题的方法是对所有isExternalFilterPresent
关闭的值使用ref,这样您始终可以访问最新的值。