   that any Reagent hiccup forms must be processed with as-element. For example
   like this:
 
-    (r/create-element \"div\" #js{:className \"foo\"}
-       \"Hi \" (r/as-element [:strong \"world!\"])
+  ```cljs
+  (r/create-element \"div\" #js{:className \"foo\"}
+    \"Hi \" (r/as-element [:strong \"world!\"])
+  ```
 
   which is equivalent to
 
-    [:div.foo \"Hi\" [:strong \"world!\"]]"
+  ```cljs
+  [:div.foo \"Hi\" [:strong \"world!\"]]
+  ```"
   ([type]
    (create-element type nil))
   ([type props]


(defn state
  "Returns the state of a component, as set with replace-state or set-state.
  Equivalent to (deref (r/state-atom this))"
  [this]
  (assert-component this)
  (deref (state-atom this)))

(defn replace-state
  "Set state of a component.
  Equivalent to (reset! (state-atom this) new-state)"
  [this new-state]
  (assert-component this)
  (assert-new-state new-state)

  "Create a component, React style. Should be called with a map,
  looking like this:

  ```cljs
  {:get-initial-state (fn [this])
   :component-will-receive-props (fn [this new-argv])
   :should-component-update (fn [this old-argv new-argv])
   :component-will-mount (fn [this])
   :component-did-mount (fn [this])
   :component-will-update (fn [this new-argv])
   :component-did-update (fn [this old-argv])
   :component-will-unmount (fn [this])
   :reagent-render (fn [args....])}   ;; or :render (fn [this])
  ```

  Everything is optional, except either :reagent-render or :render."
  [spec]
