请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

一个组件的父元素被删除了 那么这个组件是就卸载了吗?

图片描述
问题1:一个组件的父元素被删除了 那么这个组件是就卸载了吗?
问题2:这个功能是否可以在最开始判断组件是否被挂载,挂载了就卸载掉。
详细:
像我给您发的截图 第7-10行 ;
按逻辑应该先判断Tooltip组件是否挂载,挂载了就卸载掉 ;
再把ID为tooltipDom的节点删除掉。
但是我不知道咋判断Tooltip组件是否挂载 ,也不知道咋在最开始卸载,所以索性就在最开始直接判断tooltipDom是否存在,存在则删掉组件的父元素tooltipDom节点。
目前功能是暂时ok的,但是我在纠结问题1,删除了组件的父节点,组件真的被卸载了吗?

正在回答 回答被采纳积分+3

1回答

张轩 2021-03-04 20:36:23

同学你好 组件的元素是一个 DOM 节点,而组件的实例是一个 javascript object。所以我们要在删除节点的同时,卸载组件实例(unmount 方法),将这个对象销毁。所以有两行代码完成这两个功能。

你这样的做法没有必要,因为我们后面的 setTimeout 会对实例和节点都做一个销毁工作,而且这个 createTooltip 可以调用多次,创建多个实例,你光靠一个 id 有可能拿不完全


0 回复 有任何疑惑可以回复我~
  • 提问者 德玛西亚之前端 #1
    老师您好,是这样:我想让某些提示框一直存在,点×才可以关闭。所以就在23行做了一个判断,判断如果传了timeout这个值,才去执行setTimeout销毁工作。可是这样的话就导致没传timeout的情况下,再次出现新的提示框出现时无法将上一个提示框卸载掉。所以才有了上面的问题。
    
    需求:
    提示框1显示(不点×不关闭)==(此时又有了个错误响应)==>提示框1与提示框2都显示(这不是想要的)==(需求此时提示框1卸载掉)====>提示框2依旧显示
    
    所以我想到在新的提示组件创建前(如图第7行),删掉组件的节点 并且 卸载掉组件的实例,但是问题是我不知道如何在这个位置卸载掉组件的实例
    回复 有任何疑惑可以回复我~ 2021-03-04 20:54:45
  • 提问者 德玛西亚之前端 #2
    提示框1显示(不点×不关闭)==(此时又有了个错误响应)==>提示框1与提示框2都显示==需求此时提示框1卸载掉====>提示框2依旧显示
    回复 有任何疑惑可以回复我~ 2021-03-04 21:05:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信