ag-grid - 使用 forEachNode 的行选择非常慢

我正在使用 AG Grid React。我有一千行数据。我正在尝试根据索引选择一系列行。

    gridOptions.api.forEachNode(node => {
        if (node.childIndex >= startIndex && node.childIndex < endIndex) {
            node.setSelected(true)
        }
    });

事实证明这非常麻烦,在 UI 上通常需要 30 秒。似乎 setSelected 触发了多个渲染周期。正确的做法是什么?

最佳答案

问题是 - setSelected(newValue) 调度事件。当我们在一个循环中为一千个项目()执行它时 - 有一千个事件,一千个请求在 React 中排队等待异步更新,这可以解释所有的延迟。

我使用另一个版本的 setSelected - setSelected(newValue, clearSelection, suppressFinishActions) 修复了它。不幸的是,这没有写在官方文档中。 这个想法是将此版本用于除最后一个 选择之外的所有选择,以便抑制所有事件分派(dispatch)并使用我们一直使用的正常选择来选择最后一个元素,以便它也触发必要的onRowSelectedonSelectionChanged 等事件正常工作。

        this.api.forEachNodeAfterFilter(node => {
            if (node.childIndex >= startIndex && node.childIndex < endIndex) {
                selectedNodes.push(node);
            }
        });

        if (selectedNodes.length > 0) {
            // setSelected re-renders every time so use suppressFinishActions except last one
            for (let i = 0; i < selectedNodes.length - 1; i++) {
                selectedNodes[i].setSelected(true, false, true);
            }
            selectedNodes[selectedNodes.length - 1].setSelected(true);
        }

https://stackoverflow.com/questions/54779821/

相关文章:

reactjs - 覆盖 Material UI 扩展面板摘要

google-photos-api - 如何使用 Google Photos API 的 baseU

scala - 使用 Scala 将多列转换为 Spark Dataframe 上的一列 map

reactjs - 当 URL 包含多个路径时 React Router 不工作

r - R中大数据的轮廓计算

angular - NgRx - 从后端获取错误验证并传递给组件

xamarin - 使用 xamarin 表单从页面中删除向后滑动手势

unicode - 为什么 unicode 代码点的 UTF-8 编码不能放入 3 个字节

c++ - 为什么 mersenne_twister_engine 保证某些结果?

scala - 如何测量 Cats IO 效果中的耗时?