添加到 :effects in :before 函数中的 re-frame 拦截器

adding to :effects in :before function in re-frame interceptors

我有这段工作代码:

(rf/reg-fx :mr-effect (fn [] (js/console.log "I AM MR EFFECT.")))

(def mr-interceptor
  (rf/->interceptor
   :id    :mr-interceptor
   :after (fn [context] (assoc-in context [:effects :mr-effect] "some_arg"))))

因此,当我将 mr-interceptor 附加到事件处理程序时,一切都很好,我可以看到“I AM MR EFFECT”。打印出来。

但是,一旦我将 :after 更改为 :before,就像这样:

(def mr-interceptor
  (rf/->interceptor
   :id    :mr-interceptor
   :before (fn [context] (assoc-in context [:effects :mr-effect] "some_arg"))))

那么预期的副作用就不会发生。所以,我的推理是 :before 无法注册要触发的此类副作用。但是……我说得对吗? :before 能否以任何有意义的方式改变 :effects

你的结论是正确的。事件处理程序在链中的最后一个拦截器中调用(它由重新框架自动添加)并且该拦截器使用简单的 (assoc ctx :effects ...)。因此,它将覆盖您在之前任何步骤中输入 :effects 的任何内容。