ClojureScriptを使用して「シングルページ」スタイルのWebアプリを作成したいと思います。そのためには、クライアント側のテンプレートシステムが必要です。誰かが私が調べるべきClojureScriptテンプレートシステムに関する経験や推奨事項を持っていますか?ありがとう。
6 に答える
Prismaticによって作成/使用されたテンプレートシステムであるdommyをご覧になるかもしれません。
クレートが役立つことがわかりました。
私は、Clojurescript の 3 つのテンプレート フレーバーを知っています。
- Dommy: cljs コードから直接 DOM ノードを作成して操作します。
- クレート: cljs データ (ベクター、マップなど) を宣言して操作し、DOM ノードに変換します。
- Enfocus : HTML ファイルに HTML を記述し、それらを処理して cljs から変換します。これはテンプレート化についての別の考え方であり、clj ライブラリ Enlive に基づいています。
通常の DOM ノードの代わりに React DOM ノードを生成するライブラリがありますが、上記と同じように機能します。
- Om や Reagent などの Cljs React ラッパー
- サブローノ
- キオー
あなたが求めているのはテンプレート化だけであり、React にはそれ以上のものがあることは承知していますが、最も基本的な操作以外に何か必要な場合は、React ベースのアプローチをお勧めします。
Crate と Dommy の両方を使用した結果、どちらも非常に優れていると言えます。Crate は Clojure からの Hiccup の実装であり、テンプレート化のために Clojurescript に変換されているため、要素を選択するには引き続き Domina を使用する必要があります。DOM 選択とテンプレート化の両方を処理するフレームワークが必要な場合は、Dommy を使用してください
これまで言及されていなかったので、ホプロンが大好きです。次の一連のツールが組み合わされています。
- カスタム HTML 要素は通常の機能であり、 HLispで機能的に作成および構成できます。
- Javelin ClojureScript ライブラリを使用したスプレッドシートのようなデータフロー。セルと数式を使用して、反応動作を直感的にモデル化します。
- Castra Clojure および ClojureScript ライブラリを使用してサーバーと対話します。サーバーで関数を定義し、クライアントから呼び出します。
フルスタック ソリューションとして使用することも、クライアント側でのみ使用することもできます。印象を与えるには ( GitHubから取得):
(page "index.html")
(defn my-list [& items]
(div
:class "my-list"
(apply ul (map #(li (div :class "my-list-item" %)) items))))
(def clicks (cell 0))
(html
(head
(title "example page"))
(body
(h1 "Hello, Hoplon")
(my-list
(span "first thing")
(span "second thing"))
(p (text "You've clicked ~{clicks} times, so far."))
(button :click #(swap! clicks inc) "click me")))
すでに受け取った回答に加えて、 Om、Reagent、QuiescentなどのReactベースのシステムを確認することをお勧めします。3 つのうち、私の個人的なお気に入りは Reagent ですが、いずれも従来の DOM 操作の改善と言えます。