我正在使用一个库(特别是) ScalaJS
,react
在那里我遇到了一个有趣的情况,我认为这对于经验丰富的反应式程序员来说是非常常规的。我有一个Component
withState
和一个 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>
。- 我觉得我应该能够使用代表最后呈现/接收状态之间的增量的主题来对此进行建模。
- 但是,我不知道这如何适应反应式风格。