在卤素中从 Eff 发送动作?
Send action from Eff in eval in Halogen?
我正在尝试限制 purescript-halogen 中的搜索字段。我目前拥有的:
eval (Search search next) = do
State st <- get
-- clear last timeout
liftEff' $ maybe (return unit) T.clearTimeout st.searchTimeout
-- new timeout
t <- liftEff' $ T.timeout 1000 $ return unit -- how to send action from here???
modify (\(State s) -> State $ s { searchTimeout = Just t })
pure next
我考虑过将 UI 驱动程序保存在全局 Var
中并从那里发送新操作,但这对我来说似乎很老套。
或者也许还有其他方法可以做到这一点?
您可能需要为此创建一个 EventSource
。 EventSource
允许您订阅有点像 signal/stream/event 侦听器的内容,然后引发操作。
这不是您想要的,但它是使用 EventSource
到 运行 基于间隔的计时器的示例:https://github.com/slamdata/slamdata/blob/2ab704302292406e838e1a6e5541aa06ad47e952/src/Notebook/Cell/Component.purs#L213-L217
我正在尝试限制 purescript-halogen 中的搜索字段。我目前拥有的:
eval (Search search next) = do
State st <- get
-- clear last timeout
liftEff' $ maybe (return unit) T.clearTimeout st.searchTimeout
-- new timeout
t <- liftEff' $ T.timeout 1000 $ return unit -- how to send action from here???
modify (\(State s) -> State $ s { searchTimeout = Just t })
pure next
我考虑过将 UI 驱动程序保存在全局 Var
中并从那里发送新操作,但这对我来说似乎很老套。
或者也许还有其他方法可以做到这一点?
您可能需要为此创建一个 EventSource
。 EventSource
允许您订阅有点像 signal/stream/event 侦听器的内容,然后引发操作。
这不是您想要的,但它是使用 EventSource
到 运行 基于间隔的计时器的示例:https://github.com/slamdata/slamdata/blob/2ab704302292406e838e1a6e5541aa06ad47e952/src/Notebook/Cell/Component.purs#L213-L217