ant-design / pro-components

🏆 Use Ant Design like a Pro!
https://pro-components.antdigital.dev
MIT License
4.3k stars 1.36k forks source link

fix: 解决ProTable.editable.actionRender无法获取最新state快照的问题 #8547

Closed ShuangxingYang closed 3 months ago

ShuangxingYang commented 3 months ago

背景: 1.我正在使用EditableProTable进行开发 2.希望可以自定义操作列的删除功能,于是使用了editable. actionRender属性 3.我的columns定义在一个单独的文件中,即每次给Table传入的columns都是同一个

问题描述: actionRender中定义的事件处理函数onClick里,使用的state不是最新的值

复现示例: https://codesandbox.io/p/sandbox/actionrenderzhong-stateyin-yong-jiu-zhi-kqtpf5

我认为的问题所在: 代码片段在packages/table/src/Table.tsx 其中actionRender的处理也在genProColumn方法中 企业微信截图_124ab4da-87ab-475d-837f-57c483fb80f8

可以看到如果上述这些deps没有变化,那actionRender中引用的state一直都会是旧值

期望: 可以在actionRender中拿到最新的state,那么就需要在上述的deps中额外加入actionRender

影响: pro-components中的demo大多数是将columns定义在了组件内部,每次都会返回一个新值,那么这个memo也每次都会执行;我在useMemo的deps里多加入一个actionRender,对性能的影响应该也是不大的(我感觉...)

以上都是我的个人分析,且对pro-components的源码缺少全局、深入的了解,如有不对还望指正,谢谢🙏🏻

github-actions[bot] commented 3 months ago

⚡️ Deploying PR Preview...

ShuangxingYang commented 3 months ago

或者还可以这样,使用ref包一层,跟defaultDOM保持一样的实现方式,不知道你们觉得哪样更好 https://github.com/ant-design/pro-components/pull/8549

企业微信截图_d5879854-f17a-40eb-8c3a-b7aa5a2ca3b7 企业微信截图_8c2f5d1a-54be-406f-97b6-e3111462c93b