添加到 :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
的任何内容。
我有这段工作代码:
(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
的任何内容。