events - 如何在 Purescript Halogen 中实现诸如自动增量计数器之类的东西
问题描述
在 React 中给定一个非常简单的增量组件:
class Increment extends React.Component {
constructor(props){
super(props)
this.state = {
value: props.value
}
}
componentDidMount() {
setInterval(() => {
this.setState(({ value }) => ({ value: value + 1 }))
}, 1000);
}
render(){
return (
<p>{ this.state.value }</p>
);
}
}
ReactDOM.render(<Increment value={0} />, document.getElementById('root'))
这如何转化为 Purescript 的卤素?在网上浏览了各种各样的东西,我还没有找到任何可以制作我自己原型的例子。我知道Effect.Time
哪些暴露setInterval
,但是我将如何使用它来触发可以让我更新状态的东西(在受控操作中,通过handleAction
)。
我正在尝试将应用程序从 Elm 移至 Halogen,并且在该应用程序中,它依赖于subscriptions
功能的关键位来更新与直接用户输入无关的应用程序状态。如果 Halogen 具有类似的功能(我已经看到subscribe
,虽然这似乎与父/子组件之间的通信有关,但我可能误解了这一点......)最好指出它。
解决方案
这是一个用卤素编写的反例,代码位于purescript-halogen-storybook 示例。
要使其自动递增,您可以在初始化处理程序中添加一个自循环函数。
loop =
H.liftAff $ Aff.delay $ Aff.Milliseconds 1000.0
H.modify_ \s -> s { value = s.value + 1 }
loop
handleAction Initialize = loop
查看官方生命周期示例以了解如何使用initialize
.
推荐阅读
- jenkins - Teamcity 到 Jenkins 迁移
- singleton - 放置多个附件时出现 Odoo Singleton 错误
- android - 从图库中选择图像后出现空白屏幕
- css - 更改文本字段 onFocus mui 的背景颜色
- mysql - 更新/翻译字段mysql值的最佳方法
- torch - torch.save() 会覆盖之前保存在同一路径中的模型吗?
- python - 如何在 sk-learn 管道中使用我自己的自定义函数?
- django - Django & Ajax:数据在视图和模板之间丢失
- c++ - TF Lite 中 FULLY_CONNECTED 操作的问题
- python - 如何从字典中删除重复的键值(字符串)对?