如何从重新框架中的事件分派事件
How to dispatch an event from an event in re-frame
我按照这个例子:
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
是效果,不是事件。要调用效果,您需要将其作为键包含在效果映射中 return 由您的事件处理程序编辑 - 不要使用效果键发出另一个事件:
(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))}))
以上事件处理程序将return一个描述两种效果的映射:
:db
- 将应用程序数据库更新为新值(作为 :db
值提供)
:interval
- re-frame 将使用效果图
中 :interval
条目的值调用您的效果处理程序 (interval-handler
)
我按照这个例子: 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
是效果,不是事件。要调用效果,您需要将其作为键包含在效果映射中 return 由您的事件处理程序编辑 - 不要使用效果键发出另一个事件:
(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))}))
以上事件处理程序将return一个描述两种效果的映射:
:db
- 将应用程序数据库更新为新值(作为:db
值提供)
中:interval
- re-frame 将使用效果图:interval
条目的值调用您的效果处理程序 (interval-handler
)