alibaba / lowcode-engine

An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系
https://lowcode-engine.cn
MIT License
14.68k stars 2.55k forks source link

antd基础的input组件在画布中无法选中 #2278

Open lynsun opened 1 year ago

lynsun commented 1 year ago

重现步骤:

  1. 使用官方物料脚手架开发组件,执行lowcode:dev打开脚手架自带的本地开发设计器
  2. 将antd-lowcode-materials中的Input组件拖到画布中,无法在画布中选中后设置属性,只能通过大纲树选中,Select组件也有这个问题

不知道是否是本地脚手架自带的设计器的版本问题,我看官方demo里拖一个input进去是可以选中后设置属性的

Environments (please complete the following information) (required): / 请提供如下信息(必填) AliLowCodeEngine version: ^1.1.7 AliLowCodeEngineExt version: ^1.0.5 Browser: chrome 114

附:Input组件代码 import { createElement } from 'react'; import { Input as OriginalInput } from 'antd'; import { withWrap } from '../../utils/hoc';

const { Group: OriginalGroup, TextArea: OriginalTextArea, Password: OriginalPassword, Search: OriginalSearch, } = OriginalInput;

const Input = withWrap(OriginalInput);

(Input as any).Group = OriginalGroup; (Input as any).TextArea = withWrap(OriginalTextArea); (Input as any).Password = withWrap(OriginalPassword); (Input as any).Search = withWrap(OriginalSearch);

export default Input;

lynsun commented 1 year ago

这个问题请官方的同学帮忙解答下吧

shanyijin commented 1 year ago

遇到了相同的问题,

lynsun commented 1 year ago

改了下util里的withWrap函数,把forwardRef去掉就好了

shanyijin commented 1 year ago

改了下util里的withWrap函数,把forwardRef去掉就好了

改了下util里的withWrap函数,把forwardRef去掉就好了

去掉forwardRef会导致一些物料组件比如 选择器 组件渲染异常

eternalsky commented 1 year ago

没看懂什么意思,本地开发组件,为什么后面又是拖入 antd-lowcode-materials 的 input 组件。

shanyijin commented 1 year ago

ithWrap函数,把forwardRef去掉就好

等于用 antd-lowcode-materials 进行二次开发

eternalsky commented 1 year ago

ithWrap函数,把forwardRef去掉就好

等于用 antd-lowcode-materials 进行二次开发

意思是本地初始化一个组件,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中,这样吗。还是说 fork 了 antd-lowcode-materials ,然后在 antd-lowcode-materials 里启动 lowcode:dev,启动调试无法选中。

shanyijin commented 1 year ago

ithWrap函数,把forwardRef去掉就好

等于用 antd-lowcode-materials 进行二次开发

意思是本地初始化一个组件,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中,这样吗。还是说 fork 了 antd-lowcode-materials ,然后在 antd-lowcode-materials 里启动 lowcode:dev,启动调试无法选中。

fork 了 antd-lowcode-materials,其中input select 都无法选中,其他答案中有相关解释https://github.com/alibaba/lowcode-engine/issues/1849

lynsun commented 1 year ago

ithWrap函数,把forwardRef去掉就好

等于用 antd-lowcode-materials 进行二次开发

意思是本地初始化一个组件,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中,这样吗。还是说 fork 了 antd-lowcode-materials ,然后在 antd-lowcode-materials 里启动 lowcode:dev,启动调试无法选中。

本地初始化一个组件库,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中

我扒了下node_modules里antd-lowcode-materials build后的代码,发现utils/hoc里的withWrap函数是去掉了forwardRef的,但s是src里是没改的,估计是谁本地构建发了包,代码没提交

eternalsky commented 1 year ago

ithWrap函数,把forwardRef去掉就好

等于用 antd-lowcode-materials 进行二次开发

意思是本地初始化一个组件,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中,这样吗。还是说 fork 了 antd-lowcode-materials ,然后在 antd-lowcode-materials 里启动 lowcode:dev,启动调试无法选中。

本地初始化一个组件库,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中

我扒了下node_modules里antd-lowcode-materials build后的代码,发现utils/hoc里的withWrap函数是去掉了forwardRef的,但s是src里是没改的,估计是谁本地构建发了包,代码没提交

看楼上的回复,更大的可能是加了 forwardRef 但是没发。

shanyijin commented 1 year ago

下util里的withWrap函数,把forwardRef去掉

ithWrap函数,把forwardRef去掉就好

等于用 antd-lowcode-materials 进行二次开发

意思是本地初始化一个组件,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中,这样吗。还是说 fork 了 antd-lowcode-materials ,然后在 antd-lowcode-materials 里启动 lowcode:dev,启动调试无法选中。

本地初始化一个组件库,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中

我扒了下node_modules里antd-lowcode-materials build后的代码,发现utils/hoc里的withWrap函数是去掉了forwardRef的,但s是src里是没改的,估计是谁本地构建发了包,代码没提交

现在有什么好的处理方式吗?我尝试着去掉forwardRef,但这会导致select物料组件渲染异常

eternalsky commented 1 year ago

让维护 antd lowcode 物料的同学看一下~

zr443 commented 1 year ago

下util里的withWrap函数,把forwardRef去掉

ithWrap函数,把forwardRef去掉就好

等于用 antd-lowcode-materials 进行二次开发

意思是本地初始化一个组件,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中,这样吗。还是说 fork 了 antd-lowcode-materials ,然后在 antd-lowcode-materials 里启动 lowcode:dev,启动调试无法选中。

本地初始化一个组件库,然后把 antd-lowcode-materials 的 Input Copy 过来,启动调试,无法选中 我扒了下node_modules里antd-lowcode-materials build后的代码,发现utils/hoc里的withWrap函数是去掉了forwardRef的,但s是src里是没改的,估计是谁本地构建发了包,代码没提交

现在有什么好的处理方式吗?我尝试着去掉forwardRef,但这会导致select物料组件渲染异常

有人知道“导致select物料组件渲染异常”是什么异常么,我去掉了forwardRef感觉也能渲染呀,着急用,也不能干等着!

annjong commented 1 year ago

这个问题现在解决了么 我这包裹了withWrap还是没有管用 还是不能在里面写forwardRef 写上之后就无法选中了

zr443 commented 1 year ago

这个问题现在解决了么 我这包裹了withWrap还是没有管用 还是不能在里面写forwardRef 写上之后就无法选中了

去掉了forwardRef,先用着,也不知道后面有啥坑。

annjong commented 1 year ago

这个问题现在解决了么我这包裹了withWrap还是没有管用还是不能在里面写forwardRef写上之后就无法选中了

去掉了forwardRef,先用着,也不知道后面有啥坑。

去掉之后你这还能正常调到组件里面的ref了么

zr443 commented 1 year ago

这个问题现在解决了么我这包裹了withWrap还是没有管用还是不能在里面写forwardRef写上之后就无法选中了

去掉了forwardRef,先用着,也不知道后面有啥坑。

去掉之后你这还能正常调到组件里面的ref了么

暂时没有这个场景。

mywei1989 commented 1 year ago

` export function withWrap(Comp: ComponentType) { //return forwardRef((props: any, ref: Ref) => { //return <Comp {...props} ref={ref} />; //});

return (props: any) => { return <Comp {...props} />; }; } `

这样可以避免编辑态无法选中的问题 但新的问题是 预览态无法通过ref 获取到 目标组件的值了 比如输入框 就无法获取输入框的内容

annjong commented 1 year ago

` export function withWrap(Comp: ComponentType) { //return forwardRef((props: any, ref: Ref) => { //return <Comp {...props} ref={ref} />; //});

return (props: any) => { return <Comp {...props} />; }; } `

这样可以避免编辑态无法选中的问题 但新的问题是 预览态无法通过ref 获取到 目标组件的值了 比如输入框 就无法获取输入框的内容

` export function withWrap(Comp: ComponentType) { //return forwardRef((props: any, ref: Ref) => { //return <Comp {...props} ref={ref} />; //});

return (props: any) => { return <Comp {...props} />; }; } `

这样可以避免编辑态无法选中的问题 但新的问题是 预览态无法通过ref 获取到 目标组件的值了 比如输入框 就无法获取输入框的内容

这个也是我最棘手的问题,如果能有获取ref的方式的话,希望大佬同步一下~感谢