         (let [js-props #js{}
               {:keys [ref key]} props
               default-props (aget (.-constructor (.-prototype type)) "defaultProps")
-              props (merge (when default-props (.-cljsDefault default-props))
+              props (merge (when default-props (aget default-props "cljsDefault"))
                            (dissoc props :ref :key))]
-          (set! (.. js-props -cljs) props)
-          (if-not-optimized (set! (.. js-props -js) (clj->js props)) nil)
-          (when ref (set! (.. js-props -ref) ref))
-          (when key (set! (.. js-props -key) key))
+          (aset js-props "cljs" props)
+          (if-not-optimized (aset js-props "js" (clj->js props)) nil)
+          (when ref (aset js-props "ref" ref))
+          (when key (aset js-props "key" key))
           (apply React.createElement type js-props children))))))
 
 



(defn- atom-like-state-swap! [instance & swap-args]
  (let [new-value (apply swap! (.. instance -cljsState) swap-args)]
    (.setState instance (if-not-optimized
                          #js{:cljs new-value :js (clj->js new-value)}
                          #js{:cljs new-value}))



(defn- locals [instance]
  (aget instance "cljsLocals"))


(defn create-element
