在Shiny中,观察语句在app load上运行,我想在某些情况下阻止这种情况。例如,我可能有两个标题,我想以某个值开始,在应用加载后我希望它们同步。
在下面的代码中,如果你运行它,标题将在无限循环中更新,因为应用程序立即更新一个标题,然后更新另一个,依此类推。如果您取消注释其中一个" first_time"下面的代码块然后两个标题似乎都以相同的值开头。如果您取消注释两个块,那么它将执行我想要的操作 - 以预先指定的值开始,然后在进行更改时同步。
但是这段代码很复杂,我不想在所有观察者中添加if
语句。必须有一个更简单的方法。在查看文档时,似乎可能使用suspended = TRUE
和resume()
,但我无法找到示例。
我问related question,那个问题的答案同样不优雅。有什么想法吗?
library(shiny)
first_time1 <<- TRUE
first_time2 <<- TRUE
server <- function(input, output, session) {
observeEvent(input$title1, {
# if(first_time1){
# first_time1 <<- FALSE
# return()
# }
updateTextInput(session, "title2", value = input$title1)
})
observeEvent(input$title2, {
# if(first_time2){
# first_time2 <<- FALSE
# return()
# }
updateTextInput(session, "title1", value = input$title2)
})
}
ui <- fluidPage(
tabsetPanel(
tabPanel("A", textInput("title1", "titleA", "This is the title A")),
tabPanel("B", textInput("title2", "titleB", "This is title B"))
)
)
shinyApp(ui = ui, server = server)
答案 0 :(得分:2)
你要找的东西是ignoreInit
。见下文
observeEvent(input$title1, {
updateTextInput(session, "title2", value = input$title1)
}, ignoreInit = T)
observeEvent(input$title2, {
updateTextInput(session, "title1", value = input$title2)
}, ignoreInit = T)