是否可以抑制重新渲染?假设我在状态[:a]
上调度处理程序[:b]
和处理程序db-0
。这样:
db-0 -> [:a] -> db-1 -> [:b] -> db-0
结束状态相同但重新渲染两次。我不希望重新呈现中间状态db-1
。必要时,只有在[:a]
和[:b]
同时应用后,才能重新呈现。
答案 0 :(得分:1)
如果dispatch
导致更改为app-db
,则会“安排”动画帧以处理任何必要的重新渲染。因此,重新渲染将在大约16ms后发生。
如果在此期间发生了另一个dispatch
,那么它对app-db
的更改也将在已安排的即将到来的动画帧中处理。
当AF滚动时,dispatched
事件的更改将在app-db
中显示。
因此,正如您所看到的,[:a]
的发送将导致AF被安排,但在运行之前,dispatch
[:b]
将进一步更改{{1}恢复到原来的状态。
稍后AF运行时,所有第2层订阅都将运行,因为app-db
已更改(以某种方式尚未知)但是因为先前的值将app-db
新值,信号图传播将被修剪,最终不会重新渲染重新渲染。