【发布时间】:2019-08-04 08:06:39
【问题描述】:
我有一个反应式rv 和一个反应式布尔值rv.haschanged,定义如下:
rv <- reactive({
rv.haschanged()
rv.haschanged(FALSE)
cars[sample.int(nrow(cars), 1),] # return cars dataset as an example
})
rv.haschanged <- reactiveVal(FALSE)
现在有一些观察者,例如,可以将rv.haschanged 设置为TRUE。
observe({
# do something...
rv.haschanged(TRUE)
})
我想要的是 rv 仅在 rv.haschanged 更改为 TRUE 时更新自身(而不是在 rv.haschanged 更改为 FALSE 时)。上面代码的问题是它会更新rv两次。一次在观察者执行rv.haschanged(TRUE) 之后,又一次由于rv.haschanged(FALSE)。
有什么简洁直观的习语可以实现上述目标?
编辑:基本上,我想要的只是使观察者中的rv 无效,因此它会安排重新执行。
【问题讨论】:
-
rv应该什么时候更新?如果您不希望它因更改rv.haschanged而失效,您可以将其更改为eventReactive,这样它只会因更改其eventExpr中的内容而失效 -
@divibisan 确实如此。
rv是响应式的,当rv.haschanged是TRUE时它应该更新。当rv.haschanged为FALSE时,它不应更新。