是否可以在卤素评估期间渲染组件?

Is it possible to render a component during eval in halogen?

在我的卤素项目中有这个 eval 分支:

 eval (SetTest tName next) = do
      H.set (State Nothing)
      detail <- H.fromAff $ toAff settings $ getTestsByTestname (tName ^. unTestName)
      H.set (State (Just detail))
      pure next

toAff 位如果关闭 AJAX 并且可能需要一段时间才能 return。在我的渲染函数中我有

, case ts of
              Nothing ->
                HH.div [class_ BS.centerBlock]
                  [HH.i [classes (HH.className <$> ["fa", "fa-spinner", "fa-spin", "loading"])]
                     []
                  ]

              Just td ->
                HH.h3_ [HH.text $ td ^. tdName<<<unTestName]

我天真地期望在我的 aff 动作 return 之前看到一个加载微调器,但看起来 eval 在呈现 html 之前一直运行。这是正确的吗?

编辑

原来这是用户错误 - 我以错误的顺序调用我的查询。 Future mes:设置状态确实会更新 ui :-)

不,在 eval 期间修改状态确实应该触发渲染。除非您的 Aff 不是真正的异步,否则我不确定为什么您不会在这里看到您期望的内容。

您是否尝试过 H.fromAff $ later' 5000 $ pure <some value> 之类的操作?其中 later' 来自 Control.Monad.Aff<some value> 适合 detail。在它解析为 <some value>.

之前,您应该会看到加载微调器 5 秒