我正在使用一个库(特别是) ScalaJS,react在那里我遇到了一个有趣的情况,我认为这对于经验丰富的反应式程序员来说是非常常规的。我有一个ComponentwithState和一个 callback shouldComponentUpdate(State)。这里的基本思想是,如果回调被触发但State与上次没有变化render,则返回false。true否则,如果State更改很重要,也许会返回。
我正在使用一个库monix ,但它似乎与其他反应式库相同,所以我想这是一个与上下文无关的问题。
我想做类似的事情:有一些反映State自上次以来的增量的状态render。在每个 上render,清除缓冲区。或者,有一个renderedState将所有渲染状态作为序列反映的receivedState主题,一个反映所有接收到 State的更新的needsUpdate主题,以及一个反映最新是否与最新receivedState匹配的主题renderedState。不过,我在实际执行这些想法时遇到了麻烦。这是我被困在的地方:
这是我为其他回调所做的:
lazy val channel_componentWillUpdate = channel_create[ComponentWillUpdate[Props, State, ResponsiveLayoutContainerBackend, TopNode]]
def componentWillUpdate(cwupd: ComponentWillUpdate[Props, State, ResponsiveLayoutContainerBackend, TopNode]) =
Callback {
channel_componentWillUpdate.onNext(cwupd)
}
因此,当componentWillUpdate触发回调时,处理程序会onNext在channel(主题)上触发。
shouldComponentUpdate不过是不同的。它返回一个值,因此需要采用不同的结构。我很难考虑正确的调整。
总结一下:
react在视图生命周期的不同阶段有回调,例如componentDidMount,componentDidUpdate等。- 我以相同的方式处理除了一个阶段之外的所有阶段 - 回调的形状是
State -> Callback<Void>所以我所要做的就是对每种类型的生命周期事件使用 a并在触发回调时Subject提交它。onNext State -> Boolean但是一种类型的事件具有或的形状State -> Callback<Boolean>。- 我觉得我应该能够使用代表最后呈现/接收状态之间的增量的主题来对此进行建模。
- 但是,我不知道这如何适应反应式风格。