gpt4 book ai didi

clojure - 如何从重新构建的事件中调度事件

转载 作者:行者123 更新时间:2023-12-05 00:14:40 24 4
gpt4 key购买 nike

我按照这个例子:
https://github.com/Day8/re-frame/blob/master/docs/FAQs/PollADatabaseEvery60.md

这是我的间隔处理程序

(defonce interval-handler
(fn [{:keys [action id frequency event]}]
(let [live-intervals (atom {})]
(condp = action
:start (swap! live-intervals assoc id (js/setInterval #(re-frame/dispatch event) frequency))
:end (do (js/clearInterval (get live-intervals id))
(swap! live-intervals dissoc id))))))

(re-frame/reg-fx
:interval
interval-handler)

我正在尝试从此处的另一个事件发送此间隔事件:
(re-frame/reg-event-db
:start-playing
(fn [db _]
(re-frame/dispatch [:interval {:action :start
:id :some-awesome-id
:frequency 1000
:event [:tick]}])
(assoc db :is-playing? true
:fake (random-active-color db)
:real (random-active-color db))))

但它说 re-frame: no :event handler registered for: :interval
这是不可能的吗?

最佳答案

:interval是一个效果,而不是一个事件。要调用效果,您需要将其作为键包含在事件处理程序返回的效果图中 - 不要使用效果的键发出另一个事件:

(re-frame/reg-event-fx
:start-playing
(fn [{:keys [db]} _]
{:interval {:action :start
:id :some-awesome-id
:event [:tick]}]
:db (assoc db :is-playing? true
:fake (random-active-color db)
:real (random-active-color db))}))

上面的事件处理程序将返回一个描述两种效果的 map :
  • :db - 将应用程序数据库更新为新值(作为 :db 值提供)
  • :interval - re-frame 将使用值 interval-handler 调用您的效果处理程序( :interval )进入效果图
  • 关于clojure - 如何从重新构建的事件中调度事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650792/

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