我遵循了这个例子: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
这是不可能的吗?
发布于 2017-10-09 16:42:26
: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))}))上面的事件处理程序将返回一个映射,描述两个效果:
:db -将app更新为一个新值(作为:db值提供):interval -re将调用效果处理程序(interval-handler),其值为效果映射中的:interval条目。https://stackoverflow.com/questions/46650792
复制相似问题