在 Shiny 中,观察语句在应用程序加载时运行,我想在某些情况下阻止这种情况。例如,我可能有两个标题,我想以某个值启动,并且在应用程序加载后我希望它们同步。
在下面的代码中,如果您运行它,标题将在无限循环中更新,因为应用程序会立即更新一个标题,然后更新另一个标题,依此类推。如果您取消注释下面的“first_time”代码块之一,则两个标题将显示为以相同的值开头。如果您取消注释这两个块,那么它将执行我想要的操作 - 从预先指定的值开始,然后在进行更改时同步。
但这段代码很复杂,我不想if在所有观察者中添加语句。一定有更简单的方法。在查看文档时,似乎可能使用suspended = TRUEandresume()但我找不到示例。
我问了一个相关的问题,这个问题的答案同样不优雅。有什么想法吗?
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)
Run Code Online (Sandbox Code Playgroud)
您正在寻找的东西是ignoreInit。见下文
observeEvent(input$title1, {
updateTextInput(session, "title2", value = input$title1)
}, ignoreInit = T)
observeEvent(input$title2, {
updateTextInput(session, "title1", value = input$title2)
}, ignoreInit = T)
Run Code Online (Sandbox Code Playgroud)