我正在创建一个页面,该页面使用 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
to切换text
(反之亦然)。