当用户单击操作按钮时,我的Shiny应用程序将运行脚本build.R。我想通知用户不要在运行脚本时关闭应用程序。完成后,将通知用户构建成功。
这是我最小的可复制代码:
library(shiny)
ui <- fluidPage(
actionButton("build", "run the buildscript"),
textOutput("rstatus")
)
server <- function(input, output, session) {
reloadstatus <- reactiveVal("")
observeEvent(input$build, {
reloadstatus("building, do not close the app")
# in the actual app would be source("build.R")
Sys.sleep(1)
reloadstatus("successfully built")
})
output$rstatus <- renderText({
reloadstatus()
})
}
shinyApp(ui, server)
我猜这是行不通的,因为Shiny尝试先运行observeEvent
直到最后,然后再更改reactVal。如何获得所需的输出(第一个“正在重新加载...”,第二个“成功...”)?
答案 0 :(得分:2)
您可以使用shinyjs
更新消息的内容。
library(shiny)
library(shinyjs)
ui <- fluidPage(
shinyjs::useShinyjs(),
actionButton("build", "run the buildscript"),
p(id = "rstatus", "")
)
server <- function(input, output, session) {
observeEvent(input$build, {
shinyjs::html("rstatus", "building, do not close the app")
# in the actual app would be source("build.R")
Sys.sleep(1)
shinyjs::html("rstatus", "successfully built")
})
}
shinyApp(ui, server)