如何防止R Shiny中的冗余更新?

时间:2019-07-01 05:56:02

标签: r shiny reactive

input_holder <- reactiveValues(
  a = 7
)
observeEvent(input$a_button, {
  # does some computation that arrives at some_number
  input_holder$a <- some_number
})
observeEvent(input$slider_name, {
  # should do something only if not caused by input$a_button
})
output$some_output <- renderUI({
  sliderInput('slider_name', 'some_label', max=10, min=1, value=input_holder$a)
})

上面是我的代码模型。

这就是我认为如果按下a_button会发生的事件顺序。

  1. 观察a_button的watchEvent将被触发并将input_holder $ a设置为some_number。

  2. 这将导致使用此新值呈现slider_name。

  3. 然后,这将触发observeEvent,该事件监听slider_name并在其中执行代码块。

但这不是我想要的行为。如果用户更改了lider_name,并且不作为其他事件的副作用,我只希望侦听slider_name的observeEvent执行其代码块。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找updateSliderInput,它将在不重新渲染的情况下更新滑块:

observeEvent(input$a_button, {
  # does some computation that arrives at some_number
  # input_holder$a <- some_number # do you need to store the value? If you do, I think you should use eventReactive
  updateSliderInput(session, "slider_name", value = some_number)
})