我正在嘗試進入ClojureScript和Om。有一個特殊的例子讓我以圈子的方式運行。在組件數據中設置缺少密鑰的初始狀態
我有一個組件,第一次呈現沒有密鑰。
(defn model-view [data owner]
(reify
om/IWillMount
(will-mount [_]
(om/transact! data [:stats] (fn [] {}))
(go
(let [response ((<! (api/get-stats (data :id))) :body)
stats (:stats response)]
(om/update! data [:stats] stats))))
om/IRender
(render [_]
(dom/div nil
(dom/h3 nil (data :title))
;; Here I want to use the :stats key in data that I
;; queried for in IWillMount, but its not present
;; the first time this model is rendered. It's only present
;; AFTER IWillMount has ran.
(om/build model-stats-view (data :stats)))))
第一次此組件被調用時,:stats
關鍵是根本不存在於data
。這就是爲什麼我會通過API調用來獲取其統計信息。但是React仍然調用render
函數,因此組件崩潰。
我怎麼能在這個組件,讓data
稱爲:stats
空映射,從而防止試圖呈現在(om/build model-stats-view)
呼叫nil
設置一個初始狀態?
你可以使用'(get data:stats {})'? – cfrick
@cfrick工作。謝謝。但是我會留下來看看是否有更多類似「類似React」的解決方案或者IInitState或其他東西。 – tolgap