            vals
            (run! #(.warn js/console %)))))
   (let [init           (collect   :init mixins)             ;; state props -> state
-        will-mount     (collect [:will-mount] mixins)   ;; state -> state
-        before-render  (collect* [:unsafe/will-mount
+        before-render  (collect* [:will-mount
+                                  :unsafe/will-mount
                                   :before-render] mixins)   ;; state -> state
         render         render                               ;; state -> [dom state]
         wrap-render    (collect   :wrap-render mixins)      ;; render-fn -> render-fn

        _              (goog/inherits ctor js/React.Component)
        prototype      (gobj/get ctor "prototype")]

    (when-not (empty? will-mount)
      (gobj/set prototype "componentWillMount"
                (fn []
                  (this-as this
                           (vswap! (state this) call-all will-mount)))))

    (when-not (empty? before-render)
      (gobj/set prototype "UNSAFE_componentWillMount"
                (fn []

                           (let [old-state @(state this)
                                 new-state @(gobj/get next-state ":rum/state")]
                             (or (some #(% old-state new-state) should-update) false))))))

    (when-not (empty? before-update)
      (gobj/set prototype "UNSAFE_componentWillUpdate"
