问题描述
我需要订阅 app-db 以获取我只想在呈现父组件时检查一次的值。例如,当我单击“单击我”按钮时,正在处理某个 on-click
事件,我已将其状态保存在 app-db
中,其中包含正在执行的进程列表,我只是想要检查该值一次,并根据该值显示两个不同的组件。
如果值为空,我想继续正常事件。如果没有,我想向用户显示其他内容,例如弹出窗口。
现在的情况是,因为它正在积极地监听 app-db
,并且该值几乎每一秒(或几毫秒)都在变化,所以上述弹出窗口出现、消失、重新出现并再次消失对 app-db 的每次更改都非常快,这根本没有帮助。
我只想订阅一次,获取值,然后根据第一次呈现父级时的值进行检查。然后我会做一些事情来消除它。
如果我再次点击“点击我”按钮,那只会是我想要重新渲染的时候。
我还没有完全能够做到这一点。我尝试了很多方法,例如在弹出的调度期间引入延迟以及首先将处理状态引入 app-db
之后希望由于数据已经处于稳定状态,因此它可能不会改变为很多,但现在我意识到它正在积极倾听它,预计这些值会改变。
我确实尝试使用没有 deref 的订阅,但这只会给我的前端引入一个错误,所以我不确定现在该走哪条路。
解决方法
我对组件出现/重新出现的错误结果证明是由其他原因触发的。与弹出窗口 ID 的冲突/不匹配以及清除一个弹出窗口的调度导致所有弹出窗口都被销毁。
但是为了回答这个问题,当您在 (fn [])
绑定之后引入一个 let
块时您实际进行订阅并从 fn
内部调用组件时,它会起作用。