禁止重新帧重新渲染

时间:2018-01-13 08:11:46

标签: clojure clojurescript reagent re-frame

是否可以抑制重新渲染?假设我在状态[:a]上调度处理程序[:b]和处理程序db-0。这样:

db-0 -> [:a] -> db-1 -> [:b] -> db-0

结束状态相同但重新渲染两次。我不希望重新呈现中间状态db-1。必要时,只有在[:a][:b]同时应用后,才能重新呈现。

1 个答案:

答案 0 :(得分:1)

背景

如果dispatch导致更改为app-db,则会“安排”动画帧以处理任何必要的重新渲染。因此,重新渲染将在大约16ms后发生。

如果在此期间发生了另一个dispatch,那么它对app-db的更改也将在已安排的即将到来的动画帧中处理。

当AF滚动时,dispatched事件的更改将在app-db中显示。

您的方案

因此,正如您所看到的,[:a]的发送将导致AF被安排,但在运行之前,dispatch [:b]将进一步更改{{1}恢复到原来的状态。

稍后AF运行时,所有第2层订阅都将运行,因为app-db已更改(以某种方式尚未知)但是因为先前的值将app-db新值,信号图传播将被修剪,最终不会重新渲染重新渲染。