Skip to content

Instantly share code, notes, and snippets.

@darkleaf
Created April 24, 2020 14:10
Show Gist options
  • Save darkleaf/ec7bc2f6567a73675f7be9600554dc5d to your computer and use it in GitHub Desktop.
Save darkleaf/ec7bc2f6567a73675f7be9600554dc5d to your computer and use it in GitHub Desktop.
(ns example.core
(:require
[goog.dom :as dom]
[applied-science.js-interop :as j]
[example.react :as react]
[goog.object :as gobj]
[clojure.walk :as w]))
(def e (gobj/get js/React "createElement"))
(defn- transform [node]
(if-not (vector? node)
node
(let [props (-> node (meta) (clj->js))
type (first node)
type (if (keyword? type) (name type) type)
children (rest node)]
(e type props children))))
(defn hickup [node]
(w/postwalk transform node))
(defn wrap-component [component]
(-> (fn [props]
(let [children (gobj/get props "children")
markup (apply component children)]
(hickup markup)))))
(def my-component
(wrap-component
(fn [a b c & nested]
[:div
[:div (str "a: " a)]
[:div (str "b: " b)]
[:div (str "c: " c)]
nested])))
(react/render
(hickup
[my-component 1 2 3
[:div "nested 1"]
[:div "nested 2"]])
(dom/getElement "app"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment