我想要創建一個默認隱藏的HTML元素(包括查詢結果)的列表,但用戶可以切換該狀態。我已經嘗試了幾種不同的方式作爲玩具的例子,但不能讓任何工作。試劑中的互動列表
該代碼正確地創建了三個按鈕,這些按鈕正確地更改了exps狀態,但它們從未隱藏內容。
(:require [reagent.core :as r])
(def exps (r/atom [true true true]))
(defn like-component []
[:div
(for [ [i r] (map-indexed vector ["A" "B" "C"])]
[:div
[:button {:on-click #(swap! exps update-in [i] not)}]
(when (nth @exps i)
[:pre (str i r)])])])
(r/render [like-component]
(js/document.getElementById "app"))
另一方面,下面的代碼將只創建一個元素,但它會正常工作。
(defn expandable-view [e bool]
(let [expanded (r/atom bool)]
(fn []
[:li
[:div.expandable
[:div.header {:on-click #(swap! expanded not)}
"Click me to expand and collapse"]
(if @expanded
[:div.body (allow-html :pre e)])]])))
(defn like-component []
[:ul
(vec
(for [ e ["A" "B" "C"]]
(expandable-view e true))) ])
(r/render [like-component]
(js/document.getElementById "app"))
編輯:可能有關: https://github.com/reagent-project/reagent/wiki/Beware-Event-Handlers-Returning-False
是的,懶惰再次襲擊!確實有關於這個打印到我的JavaScript控制檯的警告 - 但我錯過了一些獨特的關鍵錯誤(這也很容易修復)之間。我只是簡單地將第一個示例包裝在'doall'中,不知道爲什麼我發佈的第二個塊只創建一個元素? – wovenhead