         (-> [(reagent-input) argv comp jsprops first-child]
             (with-meta (meta argv))
             as-element)
-        (let [p (if-some [key (some-> (meta argv) get-key)]
+        (let [key (some-> (meta argv) get-key)
+              p (if (nil? key)
+                  jsprops
                   (doto (if (nil? jsprops) #js{} jsprops)
-                    (.! :key key))
-                  jsprops)]
+                    (.! :key key)))]
           (make-element argv comp p first-child))))))
 
 (defn str-coll [coll]

            (util/dash-to-camel k)))
    k))

(defn convert-prop-value [x]
  (cond (or (string? x) (number? x) (fn? x)) x
        (named? x) (name x)
        (map? x) (reduce-kv (fn [o k v]
                              (doto o
                                (aset (cached-prop-name k)
                                      (convert-prop-value v))))
                            #js{} x)
        (coll? x) (clj->js x)
        (ifn? x) (fn [& args] (apply x args))
        true (clj->js x)))

(defn set-id-class [props id class]
  (let [p (if (nil? props) #js{} props)]
    (when (and (some? id) (nil? (.' p :id)))
      (.! p :id id))
    (when (some? class)
      (let [old (.' p :className)]

(declare expand-seq-check)

(defn as-element [x]
  (cond (js-val? x) x
        (vector? x) (vec-to-elem x)
        (seq? x) (if (dev?)
                   (expand-seq-check x)
                   (expand-seq x))
        :else x))

(defn expand-seq [s]
  (let [a (into-array s)]
