在我的卤素项目中有这个评估分支:
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: - )
答案 0 :(得分:1)
不,在eval
期间修改状态确实应该触发渲染。除非你的Aff
不是真的异步,否则我不确定为什么你不会在这里看到你的期望。
您是否尝试过像H.fromAff $ later' 5000 $ pure <some value>
这样的事情? later'
来自Control.Monad.Aff
而<some value>
适合detail
。在解析为<some value>
之前,您应该看到加载微调器5秒钟。