gpt4 book ai didi

lifecycle - "destroy"purescript-halogen component 使用完毕后,最好的方法是什么?

转载 作者:行者123 更新时间:2023-12-04 17:52:33 26 4
gpt4 key购买 nike

我正在使用卤素灯来控制我的应用程序的菜单系统,我想知道如何“破坏”卤素灯组件。现在,我有一个函数可以在具有特定 ID 的 div 上创建子菜单组件。在应用程序的整个生命周期中,可以多次访问子菜单,因此当前每当调用 visitSubMenu 函数时都会创建该组件的多个实例。

import Halogen.Aff as HA
import Halogen.VDom.Driver (runUI)

visitSubMenu = do
elem <- HA.selectElement "#submenu"
case elem of
(Just element) -> do
liftEff $ HA.runHalogenAff do
io <- runUI subMenuComponent unit element
-- other code using component io...

理想情况下,我希望当用户完成他们在子菜单中的工作时删除子菜单组件(即删除注入(inject)#submenu 的 HTML,进行其他清理)。这种事情可能吗?我意识到我只能在应用程序启动时设置一次组件,并在应用程序的整个生命周期中保持它的事件状态,但对我来说,如果只在需要时设置它似乎更好。


我怀疑这是正确的做法,但我最初的想法是我可以创建一个生命周期组件,当我想销毁它时,我可以发送一个 Finalize 查询,然后手动删除来自 DOM 的父元素。

最佳答案

最后,我找到的唯一解决方案是向组件发送“清理”查询,然后删除卤素组件的根 DOM 元素。

外国金融机构

exports.removeElementById = function(id) {
return function() {
var e = document.getElementById(id);
if (e) e.remove();
}
}

卤素组件模块

foreign import removeElementById :: String -> Eff (dom :: DOM | e) Unit

removeSelf :: forall e. Aff (dom :: DOM | e) Unit
removeSelf = liftEff $ removeElementById componentId

componentId :: String
componentId = "unique-id-for-component"

render :: State -> H.ComponentHTML Query
render state = HH.div [HP.id_ componentId] []

这样我就可以在使用完组件后调用 removeSelf

关于lifecycle - "destroy"purescript-halogen component 使用完毕后,最好的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com