         nocache (if (nil? no-cache) false no-cache)
         reaction (Reaction. f nil dirty nil nil
                             runner on-set on-dispose nocache)]
+    (when-not (nil? capture)
+      (when-some [c (aget capture cache-key)]
+        (aset reaction cache-key c)))
+    ;; TODO: get rid of reaction-id
     (when-some [rid (some-> capture .-reaction-id)]
       (set! (.-reaction-id reaction) rid))
     (when-not (nil? derefed)

  (-deref [this]
    (if-some [r reaction]
      (-deref r)
      (cached-reaction #(apply f args) (goog/getUid f) args this nil)))

  IEquiv
  (-equiv [_ other]

        (let [r (make-reaction
                 f :on-dispose (fn [x]
                                 (when debug (swap! -running dec))
                                 (as-> (aget o cache-key) _
                                   (dissoc _ k)
                                   (aset o cache-key _))
                                 (when-not (nil? obj)
                                   (set! (.-reaction obj) nil))
                                 (when-not (nil? destroy)
                                   (destroy x))
                                 nil))
              v (-deref r)]
          (aset o cache-key (assoc m k r))
          (when debug (swap! -running inc))
          (when-not (nil? obj)
            (set! (.-reaction obj) r))
