在重新加载帧时加载丢失的数据

时间:2015-08-11 11:44:40

标签: clojure reagent re-frame

在重新框架中,我有一个基本上是这样的观点:

(defn tool-panel []
  (let [current-tool (re-frame/subscribe [:current-tool])]
    (fn []
      [:h1 (@current-tool "name")])))

立即显示,但是当前工具可能需要一段时间才能显示,除非之前已加载,否则需要从服务器请求工具数据。在此期间,@ currrent-tool为nil,此代码崩溃。处理这个问题的适当方法是什么?我想过这样做:

(defn tool-panel []
  (let [current-tool (re-frame/subscribe [:current-tool])]
    (fn []
      (when @current-tool
        [:h1 (@current-tool "name")]))))

有效,但在加载时显示空白页面。如果我这样做:

(defn tool-panel []
  (let [current-tool (re-frame/subscribe [:current-tool])]
    (fn []
      (if @current-tool
        [:h1 (@current-tool "name")]
        [:h1 "Loading"]))))

我觉得这个视图正在扮演一个应该具有的额外角色:知道如何显示加载消息。此外,我可以看到这很快演变成:

(defn tool-panel []
  (let [current-tool (re-frame/subscribe [:current-tool])
        foo (re-frame/subscribe [:foo]
        bar (re-frame/subscribe [:bar])]
    (fn []
      (if (and @current-tool @foo @bar)
        [:h1 (@current-tool "name")]
        [:h1 "Loading"]))))

这感觉就像一种常见的模式,我会一遍又一遍地重复。由于重新框架已经提供了一种模式,我想知道我是否遗漏了一些东西。是否有不同的方法来构建一个使用重新框架的应用程序,最终不得不抽象出我刚刚发现的这种模式?

我想用更通用的术语我可以说,你如何处理试剂应用程序中的缺失数据?

1 个答案:

答案 0 :(得分:4)

我不认为你错过了太多。

组件的目标是渲染状态,如果那个状态还没有,那么就没有任何东西可以渲染,除了可能是一条消息说"仍在加载...& #34 ;.

有一个Wiki页面: https://github.com/Day8/re-frame/wiki/Bootstrap-An-Application