lowcode-engine IDocumentModel 的 onMountNode 触发时组件实例并未挂载到 document 上

bwitn5fc  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(74)

Describe the bug (required) / 详细描述 bug(必填)

拖动组件到画布上,插件内部监听 project 的当前文档的 onMountNode 事件,期望获取组件的 DomNode 并执行其它逻辑,但是此时节点并未挂载到 document 上,无法获取到 Dom 节点;

/**
* 当前 document 新增节点事件,此时节点已经挂载到 document 上
* set callback for event on node is mounted to canvas
*/
  onMountNode(fn: (payload: { node: Node }) => void): IPublicTypeDisposable;

这里的 document 指的是引擎的 IPublicModelDocumentModel 吧,而非 HTML 的 Document?
如果是引擎的 document,是否考虑增加引擎 Node 的生命周期回调?

To Reproduce (required) / 如何复现 bug?(必填,非常重要)

加载插件,

const TestPlugin = (ctx: IPublicModelPluginContext) => {
    return {
        async init() {
            const { project } = ctx;
            project.getCurrentDocument()?.onMountNode(({ node }) => {
                console.log('onMountNode', node);
                const domNode: HTMLElement = node.getDOMNode();
                // domNode is undefined, it not exists
                domNode.style.position = 'fixed';
                domNode.style.left = `${this.x}px`;
                domNode.style.top = `${this.y}px`;
                domNode.style.transition = 'none';
            });
        },
    };
};

拖到组件到画布上,onMountMode 触发,node.getDOMNode() 为 undefined

Expected behavior (required) / 预期行为(必填,非常重要)

期望 onMountNode 时 node.getDOMNode() 可以获取到 Dom 节点

Screenshots (optional) / bug 截图(可选)

Environments (please complete the following information) (required): / 请提供如下信息(必填)

  • AliLowCodeEngine version: v1.2.2
  • AliLowCodeEngineExt version: v1.0.6
  • Browser: Chrome V119.0.6045.200 (Official Build) (64-bit)
jhiyze9q

jhiyze9q1#

为什么协议中只有容器组件才有生命周期 Hook 方法:lifeCycles,是否可以考虑增加组件的生命周期控制回调;

例如上诉问题可以利用 HOC 组件来实现包裹节点的 componentDidMount lifeCycle。

相关问题