私は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
レンダリングしようとするのを防ぐにはどうすればよいですか?nil
(om/build model-stats-view)