   [src]
   (if-not (identical? *target* "nodejs")
     (.renderToStaticMarkup js/ReactDOMServer src)
-    (let [react-dom-server (js/require "react-dom/server")]
+    (let [^js/ReactDOMServer react-dom-server (js/require "react-dom/server")]
       (.renderToStaticMarkup react-dom-server src))))
 
 ;; JS components adapter

                (fn [error info]
                  (this-as this
                           (vswap! (state this) call-all did-catch error {:rum/component-stack (gobj/get info "componentStack")})
                           (.forceUpdate this)))))

    (gobj/set prototype "componentWillUnmount"
              (fn []

                                                 (gobj/get next-props ":rum/initial-state"))
                               next-state (reduce #(%2 old-state %1) state will-remount)]
            ;; allocate new volatile so that we can access both old and new states in shouldComponentUpdate
                           (.setState ^js/React.Component this #js {":rum/state" (volatile! next-state)})))))

    (when-not (empty? should-update)
      (gobj/set prototype "shouldComponentUpdate"
