首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在重新帧中从事件中分派事件

如何在重新帧中从事件中分派事件
EN

Stack Overflow用户
提问于 2017-10-09 16:13:59
回答 1查看 3.1K关注 0票数 5

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

这是我的间隔处理程序

代码语言:javascript
复制
(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)

我试图从另一个事件中分派这个间隔事件:

代码语言:javascript
复制
(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

这是不可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-09 16:42:26

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

代码语言:javascript
复制
(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条目。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46650792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档