Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Transfer] Transfer的已选择项目默认渲染能不能提供自带的虚拟化(对应renderSelectedPanel的区域)? #2586

Open
shaoerkuai opened this issue Nov 23, 2024 · 2 comments
Labels
feature request Request new feature

Comments

@shaoerkuai
Copy link

Which Component Need Enhancement 期望新增功能的组件

  • Transfer

What does the proposed API look like 期望支持的API

同tree的虚拟化

Feature Description 功能描述

目前业务上有一个需求,涉及对数千个资源的操作,穿梭框已选择项目,单次渲染1000+数据以上有明显的卡顿,到2000左右时候几乎无法正常使用,卡顿非常明显。

在tree模式下,左侧启用虚拟化后,3000+数据渲染还是比较流畅的,但是右侧就不行了,只能一次操作几百个数据。

由于renderSelectedPanel已经开出来了,我想应该可以自己去用虚拟化渲染,不过作为组件的话,有可能其他人也会遇到这个情况,所以把场景提出来了,看下是否可以做成共性呢?

Additional information 补充说明

image

@shaoerkuai shaoerkuai added the feature request Request new feature label Nov 23, 2024
@shaoerkuai
Copy link
Author

shaoerkuai commented Nov 24, 2024

目前我的实现方式,
image

            <Transfer style={{height: 730}} loading={treeLoading} dataSource={data} type="treeList"
                      value={selectedValue}
                      onChange={$selectedValue}
                      treeProps={{
                          virtualize: {
                              height: '620px',
                              itemSize: 28,
                          },
                          showPath: true,
                          showFilteredOnly: true
                      }}
                      renderSelectedPanel={(selectedPanelProps) => {
// 这里得组件化,忘记当初为什么想组件化了,目前还是有不必要的重绘,但是性能方面还好
                          return <RenderVirtualized {...selectedPanelProps}></RenderVirtualized>
                      }}
                      renderSourceHeader={renderCaseCount}
                      emptyContent={{
                          right: '请选择要操作的资源~'
                      }}
            ></Transfer>

总体来看,除了每次删除东西后,虚拟化列表会重绘,滚动条自动跑到最上面,其他还是比较完美的。

另一个问题是,tree的节点数量在1000+以上后,勾选会有不太明显的渲染暂停,差不多300ms左右才会回显,这个应该和虚拟化无关,和tree+transfer内部处理勾选的方式有关,
节点数量下降到850时,则几乎无感,渲染和响应都很丝滑。

image

欢迎一起讨论

@pointhalo
Copy link
Collaborator

目前在 Transfer层级没有提供 virtualize 的能力。renderSourcePanel 在tree 模式下,是因 Tree 组件支持了,所以会有这样的能力。
从使用场景上来说,支持虚拟化也是合理的✅。只是之前我们自己的内部场景用得少,所有没有做。
我们可以在后续的版本里加一下,但暂时不确定交付版本和对应的时间(存量的issue是按顺序和修改工作量综合排序的,24Q4这个季度我们的人力主要在增加一些新组件上)
如果你有意愿也欢迎提个 PR ❤️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request Request new feature
Projects
None yet
Development

No branches or pull requests

2 participants