Fork in initializer fails to update state
JordanMartinez opened this issue · 1 comments
JordanMartinez commented
I'm not sure whether this is a bug with Halogen or with Halogen Hooks. Paste the below code into https://try.purescript.org and you'll see that Loading
never changes to Loading...
:
module Main where
import Prelude
import Data.Maybe (Maybe(..))
import Data.Monoid (power)
import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Effect.Aff (Aff, Milliseconds(..), delay)
import Halogen (liftAff)
import Halogen as H
import Halogen.Aff (awaitBody, runHalogenAff)
import Halogen.HTML as HH
import Halogen.Hooks as Hooks
import Halogen.VDom.Driver (runUI)
main :: Effect Unit
main = runHalogenAff do
body <- awaitBody
runUI loading unit body
loading :: forall q i o. H.Component HH.HTML q i o Aff
loading = Hooks.component \_ _ -> Hooks.do
state /\ stateId <- Hooks.useState (-1)
Hooks.useLifecycleEffect do
id <- Hooks.fork do
liftAff $ delay (Milliseconds 300.0)
Hooks.modify_ stateId (\s -> if s == 2 then 0 else s + 1)
pure $ Just do
Hooks.kill id
Hooks.pure $
HH.h1_
-- Should look like "Loading" -> "Loading." -> "Loading.." -> "Loading..."
[ HH.text $ "Loading" <> (power "." state) ]
JordanMartinez commented
I can reproduce this with just plain Halogen, so I'm pretty sure I'm doing something wrong here, or there is a bug in Halogen. Closing.