戻るボタンと進むボタンをクリックしている間、すべてのページで機能する試薬があります。ただし、ページが更新されると例外がスローされます。
私のアプリは、Firebase とsets
アトムからデータをフェッチします。次に、UI がレンダリングされます。ビューはアトムからデータを取得し、UI をレンダリングします。
しかし、更新すると、Atom が Firebase によって取り込まれる前にページがレンダリングされ、データがまだ利用できないため例外が発生するようです。
注:(println clicked-job uid)
マークアップをレンダリングするのではなく、ページを更新するprintln
と、最初nil
にデータが返され、2 回目にデータが返されます。
/* Atom */
(def current-view (atom {"jobs-list" {}}))
/* Helper Functions */
(defn set-list! [value]
(swap! app-state assoc-in ["jobs-list"] value))
(defn clicked-job [uid]
(get-in @app-state ["jobs-list" uid]))
/* View */
(defn job-view [uid]
(let [job clicked-job uid)]
[:div
[:div (job "name")] /***THROWS EXCEPTION HERE***/
[:a.routes {:href "#/"} "home page"])
/* Fetch data from Firebase and put it in Atom */
(let [fb (js/Firebase. "https://firebaseio.com/listings")]
(.on fb "value" #(set-list! (js->clj (.val %)))))
/* Set app-view to current-view */
(defn app-view []
[:div (@data/current-view)])
/* Render app-view */
(reagent/render-component [app-view] (.getElementById js/document "app"))
ページを適切に更新するための助けをいただければ幸いです。