Ag-Grid外部过滤不响应状态更改

时间:2019-06-03 15:08:04

标签: javascript reactjs ag-grid

我一直在努力使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>
        );
    };

1 个答案:

答案 0 :(得分:0)

有点晚了,但是今天早上我遇到了一个类似的问题,我将发布我发现可以在将来解决相同问题的人们的东西。发生这种情况是因为ag-grid React从未更新isExternalFilterPresent的回调。我通过将回调存储在变量中,使网格重新呈现,然后在从gridApi获得的gridOptions内检查isExternalFilterPresent的回调来确认这一点。这两个回调总是相同的,这意味着您的回调isExternalFilterPresent关闭的任何值都不会更新。解决此问题的方法是对所有isExternalFilterPresent关闭的值使用ref,这样您始终可以访问最新的值。