LogicFlow
LogicFlow copied to clipboard
自定义Html节点的componentWillUnmount不会执行
使用了自定义Html节点,但是在页面卸载时,自定义HTML节点的componentWillUnmount不会执行。但是HtmlNode中包含了componentWillUnmount接口
如果是用react自定义的HTML节点,这个节点组件不是直接挂载到页面组件的,所以不会出发componentWillUnmount。能说一下你需要在componentWillUnmount做什么事情吗?
HtmlNode会用到Ant design的Tooltip组件,而且Tooltip的visible是固定设置成了true,所以Tooltip会一直显示,是特意要这样处理的。但是如果画布销毁的时候,没有调用HtmlNode的componentWillUnmount, Tooltip就不会卸载,一直显示在页面。
HtmlNode中也会使用logicFlow.on去订阅dragstart等事件,不触发componentWillUnmount, 就没有机会取消订阅。可能会有内存泄漏吧?
正常情况不会出现内存泄露问题,事件最终也是挂载到lf实例上的,离开页面时lf实例没有被继续引用内存就会被浏览器回收。
正常情况不会出现内存泄露问题,事件最终也是挂载到lf实例上的,离开页面时lf实例没有被继续引用内存就会被浏览器回收。
嗯,这样是没问题。请问下,你们会考虑支持componentWillUnmount吗?我看HtmlNode继承的BaseNode extends Component<IProps, Istate> {是这样定义,它类型定义里面包含了componentWillUnmount接口,不过代码核心没支持componentWillUnmount。
我想实现的效果是:对一个节点做校验,校验失败的时候,在节点的正下方(显示在节点外面,不是节点内侧)显示文案 “错误“ + 一个 antd的 小问号 Icon,鼠标悬停小问号显示具体的校验错误信息。但是在HtmlNode中的内容使用定位显示在节点下方实现不了,内容显示不出来,内容都被限制在节点所在的框里面了。所以我只能用antd的Tooltip来实现。Tooltip是相对body的定位,可以实现定位。
感觉可以把这种节点外部的提示做成一个插件,具体做法可以参考菜单插件和自定义插件教程
感觉可以把这种节点外部的提示做成一个插件,具体做法可以参考菜单插件和自定义插件教程
嗯,这样是一种思路。插件显示的内容相对画布来定位的。我想要的效果是节点拖拽的时候,它下面的内容跟着移动。如果要用插件,节点拖拽时,需要频繁的去计算插件的显示位置并更新位置。节点下的内容和节点在移动过程中不会100%同步移动,会有细微的延时。只有使用css的定位实现的,才能是一个整体去移动。
麻烦问下这个有计划考虑支持吗?比如logicflow实例提供destroy方法,destroy方法中会去调用所有node的componentWillUnmount?因为我将节点用到的antd Tooltip的visible永远设置成了true,所以需要在销毁画布的时候销毁Tooltip,要不然Tooltip一直显示。目前我的做法是在初始化logicflow实例的组件被销毁前,使用logicflow emit一个destory事件,然后每个组件中logicflow.on订阅destroy事件来处理。这样能满足我的需求,但感觉不够优雅。
HtmlNode中既然有componentWillUnmount,就应该实现它合适些,不然容易误导人;如果不考虑实现的话,可以将componentWillUnmount签名去掉。
会考虑,预计v1.2.0正式发布后会提供主动效果logicflow的方法,这时候会触发所有节点的componentWillUnmount。