Как предотвратить избыточное обновление в R Shiny? - PullRequest
0 голосов
/ 01 июля 2019
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_

  1. Наблюдение за событием a_button будет запущено и для input_holder $ a установлено значение some_number.

  2. Это приведет к отображению имени слайдера с этим новым значением.

  3. Это тогда вызовет наблюдаемое событие, которое слушает имя-слайдера и выполнит блок кода внутри него.

Но это не то поведение, которое я хочу. Я хочу, чтобы наблюдаемое событие, которое слушает slider_name, выполняло свой блок кода, если имя slider_name было изменено пользователем, а не как побочный эффект какого-либо другого события.

1 Ответ

1 голос
/ 01 июля 2019

Я думаю, что вы ищете 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)
})
...