【发布时间】:2015-10-28 20:32:41
【问题描述】:
我正在尝试学习 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 这行得通。谢谢。但我会留下来看看是否有一个更“类似 React”的解决方案
IInitState或其他东西。
标签: clojure clojurescript om