我怎样才能在重新框架中只订阅一次应用程序数据库?

How can I subscribe only once to the app-db in re-frame?

我需要订阅 app-db 以获得我只想在呈现父组件时检查一次的值。例如,当我单击“单击我”按钮时,正在处理某个 on-click 事件,我已将其状态保存在 app-db 中,其中包含正在完成的进程列表,我只是想要检查一次该值,并根据该值显示两个不同的组件。

如果值为空,我想继续正常事件。如果没有,我想向用户显示其他内容,例如弹出窗口。

现在的问题是,因为它正在主动监听 app-db,并且该值几乎每秒(或几毫秒)都在变化,所以上述弹出窗口会出现、消失、重新出现,然后每次更改 app-db 都会再次超快地消失,这根本没有帮助。

我只想订阅一次,获取值,并根据父项首次呈现时的值进行检查。然后我会做一些事情来消除这种情况。

如果我再次单击“单击我”按钮,那只是在我希望它重新呈现时。

我还没有完全做到这一点。我尝试了很多方法,例如在弹出窗口的调度期间引入延迟以及在首先将处理状态引入 app-db 之后希望由于数据已经处于稳定状态,它可能不会改变很多,但现在我意识到它正在积极倾听它,预计这些值会发生变化。

我确实尝试过在没有 deref 的情况下使用订阅,但这只会给我的前端带来错误,所以我不确定现在该走哪条路。

我的组件 diappearing/reappearing 错误原来是由其他原因触发的。一个 conflict/mismatch 带有 popup-ids 和一个清除一个弹出窗口导致销毁所有弹出窗口的调度。

但要回答这个问题,当您在实际进行订阅的 let 绑定之后引入 (fn []) 块并从 fn 内部调用组件时,它会起作用.