我有一个试剂,可以在单击后退和前进按钮时在所有页面上工作。但是,当页面被刷新时,它会引发异常。
我的应用从 Firebase 和sets
一个原子中获取数据。然后随着 UI 的渲染。视图从 atom 中获取数据并呈现 UI。
但是当我刷新时,似乎页面是在我的 Atom 被 Firebase 填充之前呈现的,这会导致异常,因为数据尚不可用。
注意:当我只刷新页面(println clicked-job uid)
而不渲染标记时,println
运行两次,第一次返回nil
,第二次返回数据。
/* 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"))
任何有助于正确刷新页面的帮助!