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 "!"]

関連

出典