私は現在 om を試しており、外部データを読み込んでコンポーネントに表示しようとしています。
私の詳細コンポーネント:
(defn detail-component [app owner opts]
(reify
om/IInitState
(init-state [_]
(om/transact! app [:data] (fn [] "Test")))
om/IWillMount
(will-mount [_]
(go (let [foo (<! (fetch-something 1))]
(om/update! app #(assoc % :data foo))
)))
om/IRender
(render [_]
(dom/div nil
(dom/h1 nil "Foo")
(om/build another-component app)
)
))
)
( fetch-something
API からデータを取得しています)。
(defn another-component [{:keys [data]}]
(om/component
(.log js/console data)
(dom/h2 nil "Another component goes here")
(dom/h2 nil (data :description))
)
)
要約すると、detail-component は、マウントする前にデータをフェッチし、それを にアタッチしてapp
ビルドしanother-component
ます。another-component
次に、そのデータから説明を取り出して表示します。
ただし、実行するとUncaught TypeError: Cannot read property 'call' of null
、説明にアクセスしようとしているところに到達します。これは、 がビルドされた時点another-component
で、データがまだ存在せず、失敗していることを示しています。
データが利用可能になったときにアプリをビルドするように om に指示するにはどうすればよいですか? または、いくつかのnil?
チェックを組み込む必要がありますか?