om-boostrap を使用して賃借人情報を表示および編集するページを作成しています。(Clojure は知っていますが、CLJS/Om/React/最新の Web 開発全般は初めてです。) テナント情報の表示と編集の間の UI と機能は似ています。どちらも入力フィールドを使用できます。編集には、フィールドを「静的」ではなく「テキスト」にする必要があり、「送信」ボタンと「キャンセル」ボタンが必要です。
私が直面している問題は、そのようなコンポーネントを変更する React/Om の方法を理解できないことです。ビューは次のように定義されます。
(defcomponent view [{:keys [id] :as app} owner]
(render
[_]
(let [tenant (get @tenants id)]
(dom/div
(om/build header/header-view app)
(dom/div {:class "h3"} "View Tenant\t"
(utils/button {:on-click (fn []
(om/update-state! owner
#(assoc app :edit? true))
(om/refresh! owner))}
"Edit"))
(om/build tenant-info {:edit? (:edit? app)
:tenant {:id id
:name "Funny name"
:unit-addr "Funny addr"
:rent "Lots of rent"}})))))
ここでは関数全体を貼り付けませんtenant-view
が、om-bootstrap を使用して各テナント データ フィールドの Bootstrap 入力を作成します。
. . .
(let [input-type (if edit? "text" "static")]
(i/input {:ref "name-display"
:type input-type
:label "Tenant Name"
:label-classname "col-xs-2"
:wrapper-classname "col-xs-4"
:value (str name)})
. . .)
複数のアプローチを試しました。:on-click
ボタンの機能を使用してアプリの状態を変更し、edit?
プロパティをに設定しtrue
、入力を編集可能にするために再レンダリングを促す最新のものを投稿しました。
これは機能せず、React または Om のドキュメントにガイダンスが見つかりません。
- 同じコンポーネントを異なる方法でレンダリングする正しい方法は何ですか? (私の場合、
view
関数の入力フィールドです。) - どの React または Om ドキュメントが関連していますか?
edit?
更新:フラグをにハードコードすると、入力を編集可能にすることができるので、入力を編集可能にすることtrue
は問題ではありませstatic
んtext
。