当动态输入元素添加到UI时,它将触发其已存在的observeEvent。特别是,请参阅下面的示例,其中textInput是在服务器端函数的第一次加载时动态添加的。然后当它呈现时将触发observeEvent。
有没有一种方法可以在添加输入元素时一般性地避免这种触发,特别是,我想测试输入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)
})
obServeEvent
正在对input$test
的存在做出反应。因此,当用value = ""
初始化时,observeEvent
将会触发,因为""
仍然是非空值。作为一个快速修复,你可以将observeEvent
包装在一个逻辑中,只有当input$test
不等于""
时才会运行:
observeEvent(input$test, {
if (!input$test == ""){
browser()
}
}, ignoreInit = T)
})