TL;DR
ClojureScript と React の間に、シンプルなインタフェースを提供するライブラリ。JSX の代わりに、Hiccup スタイルの DSL で HTML を表現する。
なぜ必要か
少ない概念で複雑な UI を作れるようにすることを目指している。普通の ClojureScript の関数とデータだけで UI を組み立てられ、標準で十分に速いので、パフォーマンスを意識する場面は少ない。
仕組み
コンポーネントは ClojureScript の関数である。小さなコンポーネントを組み合わせて大きなコンポーネントを作り、子のコンポーネントには普通の Clojure のデータを渡す。
UI は ClojureScript の Vector、Map、Keyword などで表す。Vector の最初の要素がタグを表す Keyword で、続けて属性の Map を置き、残りの要素が子になる。
状態は、Reagent 版の atom である ratom で持つ。ratom は clojure.core の atom と同じように動くが、deref されるたびにそれを記録する。ratom を読んでいるコンポーネントは、値が変わると再描画される。
例
[:p "Hello, " name "!"]