Как избежать запуска начального наблюдаемого события динамически добавленного ввода

Когда динамический элемент ввода добавляется в пользовательский интерфейс, он запускает его уже существующий наблюдатель. В частности, см. Пример ниже, где textInput динамически добавляется при первой загрузке серверной функции. Затем, когда он рендерит, будет наблюдаться Наблюдение за событием.

Есть ли способ, которым мы можем вообще избежать этого срабатывания при добавлении элемента ввода, в частности, я хотел бы протестировать вход 1 и тестировать вход 2 двумя выстрелами аналогичным образом, то есть не при инициации.

Файл UI.R

library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

 fluidRow(
   uiOutput("my_output"),
   textInput(inputId = "test2", label = "test2", value = "start value"))

))

Файл server.R

library(shiny)

first.load <- TRUE
shinyServer(function(input, output) {

  if(first.load){
    output$my_output <- renderUI({
      textInput(inputId = "test", label = "test", value = NULL)
    })
  }

  observeEvent(input$test2,{
    browser()
  }, ignoreInit = T)

  observeEvent(input$test, {
    browser()
  }, ignoreInit = T)
})

1 ответ

obServeEvent реагирует на присутствие input$test, Поэтому, когда он инициализируется с value = "" observeEvent будет стрелять с "" по-прежнему ненулевое значение. В качестве быстрого решения вы можете обернуть observeEvent в логике, чтобы бежать, только если input$test не равно "":

observeEvent(input$test, {
    if (!input$test == ""){
       browser()
    }
  }, ignoreInit = T)
})
Другие вопросы по тегам