在重新框架中加载数据时处理丢失的数据
Dealing with missing data while it's being loaded in re-frame
在重新框架中,我的观点基本上是这样的:
(defn tool-panel []
(let [current-tool (re-frame/subscribe [:current-tool])]
(fn []
[:h1 (@current-tool "name")])))
它会立即显示,但 current-tool 可能需要一段时间才能显示,除非之前已加载,否则需要从服务器请求工具数据。在那段时间里,@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"]))))
这感觉像是一种常见的模式,我会一遍又一遍地重复。由于 re-frame 已经提供了一个模式,我想知道我是否遗漏了什么。有没有不同的方法来构建一个使用重新框架的应用程序,而不必最终抽象出我刚刚发现的这个模式?
我想用更通用的术语来说,你们如何处理试剂应用程序中丢失的数据?
我不认为你错过了太多。
组件的目标是渲染状态,如果该状态还不存在,那么就没有什么可以渲染的,除了一条消息说 "Still loading ..."。
有一个关于此的 Wiki 页面:
https://github.com/Day8/re-frame/wiki/Bootstrap-An-Application
在重新框架中,我的观点基本上是这样的:
(defn tool-panel []
(let [current-tool (re-frame/subscribe [:current-tool])]
(fn []
[:h1 (@current-tool "name")])))
它会立即显示,但 current-tool 可能需要一段时间才能显示,除非之前已加载,否则需要从服务器请求工具数据。在那段时间里,@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"]))))
这感觉像是一种常见的模式,我会一遍又一遍地重复。由于 re-frame 已经提供了一个模式,我想知道我是否遗漏了什么。有没有不同的方法来构建一个使用重新框架的应用程序,而不必最终抽象出我刚刚发现的这个模式?
我想用更通用的术语来说,你们如何处理试剂应用程序中丢失的数据?
我不认为你错过了太多。
组件的目标是渲染状态,如果该状态还不存在,那么就没有什么可以渲染的,除了一条消息说 "Still loading ..."。
有一个关于此的 Wiki 页面: https://github.com/Day8/re-frame/wiki/Bootstrap-An-Application