在eval期间是否可以在卤素中渲染元件?

时间:2017-01-13 16:18:06

标签: purescript halogen

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

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

如果关闭做AJAX,toAff位可能需要一段时间才能返回。在我的渲染功能中我有

, 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]

我天真地期待在我的动作返回之前看到一个加载微调器,但看起来eval在渲染html之前一直运行。这是对的吗?

修改

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

1 个答案:

答案 0 :(得分:1)

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

您是否尝试过像H.fromAff $ later' 5000 $ pure <some value>这样的事情? later'来自Control.Monad.Aff<some value>适合detail。在解析为<some value>之前,您应该看到加载微调器5秒钟。