Does re-frame allow me to register global interceptors? Ones which are included for every event handler?
No, nothing direct.
It's easy to make happen.
Let's assume you have an interceptor called omni-ceptor
which you want
automatically added to all your event handlers.
You'd write a replacement for both reg-event-db
and reg-event-fx
, and get
these replacements to automatically add omni-ceptor
to the interceptor
chain at registration time.
Here's how to write one of these auto-injecting replacements:
(defn my-reg-event-db ;; a replacement for reg-event-db
;; 2-arity with no interceptors
([id handler]
(my-reg-event-db id nil handler))
;; 3-arity with interceptors
([id interceptors handler]
(re-frame.core/reg-event-db ;; which uses reg-event-db
id
[omni-ceptor interceptors] ;; <-- inject `omni-ceptor`
handler)))
NB: did you know that interceptor chains are flattened and nils are removed?
With this in place, you would always use my-reg-event-db
instead of the standard reg-event-db
:
(my-reg-event-db
:event-id
(fn [db v]
...))
And, hey presto, you'd have your omni-ceptor
"globally" injected.
Up: FAQ Index