Inspired by React and Reagent.
[respo "0.9.2"]
DOM syntax
(div {:class-name "demo-container"
:style {:color :red}
:on-click (fn [event dispatch! mutate!])}
(div {}))
Text Node:
(<> content)
; with styles
(<> content {:color :red
:font-size 14})
Component definition:
(defcomp comp-container [content]
(div
{:class-name "demo-container"
:style {:color :red}}
(<> content)))
App initialization:
; initialize store and update store
(defonce *store (atom {:point 0 :states {}}))
(defn dispatch! [op op-data] (reset! *store updated-store))
; render to the DOM
(render! mount-point (comp-container @*store) dispatch!)
Rerender on store changes:
(defn render-app! [] (render! mount-point (comp-container @*store) dispatch!))
(add-watch *store :changes (fn [] (render-app!)))
Reset virtual DOM caching during hot code swapping, and rerender:
(defn reload! []
(clear-cache!)
(render-app!))
Read docs to use Respo:
yarn compile-test
node target/test.js
Calcit Workflow https://github.com/mvc-works/calcit-workflow
MIT