            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

        will-remount    (collect* [:did-remount             ;; state -> state
                                   :will-remount] mixins)   ;; old-state state -> state
        should-update  (collect   :should-update mixins)    ;; old-state state -> boolean
        will-update    (collect [:will-update] mixins)   ;; state -> state
        before-update  (collect* [:unsafe/will-update
                                  :before-render] mixins)   ;; state -> state
        did-update     (collect* [:did-update               ;; state -> state
                                  :after-render] mixins)    ;; state -> state

                           (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"
