如果我设置它就有效immediate = T
in removeUI
and insertUI
。我从这里得到了这个想法post https://stackoverflow.com/questions/56908652/r-shiny-insertuis-immediate-argument-does-not-work-with-images- 它没有解释为什么immediate = T
虽然需要。根据帮助页面:
立即 - UI 对象是否应立即插入到应用程序中
你调用 insertUI,或者 Shiny 是否应该等到所有输出都完成
已更新并且所有观察者都已运行(默认)。
但我不明白这在 for 循环的上下文中意味着什么。这和for循环的范围有关系吗?
如果有人可以在这里发布解释,我会接受他们的答案。
更新的代码:
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
actionButton(inputId = "go", label = "Start"), #, onclick = "$('#my-modal').modal().focus();"
shinyWidgets::progressBar(id = "pb", value = 0, display_pct = TRUE),
div(id = 'placeholder')
)
server <- function(input, output, session) {
observeEvent(input$go, {
shinyWidgets::updateProgressBar(session = session, id = "pb", value = 0) # reinitialize to 0 if you run the calculation several times
for (i in 1:10) {
updateProgressBar(session = session, id = "pb", value = 100/10*i)
removeUI('#text', immediate = T)
insertUI('#placeholder', ui = tags$p(id = 'text', paste('iteration:', i)), immediate = T)
Sys.sleep(1)
}
})
}
shinyApp(ui = ui, server = server)