闪亮的downloadHandler等待数据准备就绪

闪亮的downloadHandler等待数据准备就绪,r,shiny,R,Shiny,我闪亮的应用程序中的数据处理需要几秒钟。 我有一个下载按钮,我希望它要么在数据准备好之前不可点击,要么让下载处理程序等待准备好。 此时,在5秒之前单击下载按钮将返回默认html文件,5秒之后,该文件将按预期运行 我目前的解决方案是使用'shinyjs::hide/show'。我在下面展示了这一点 这是最佳实践吗?另外,为什么要在开始时使用shinyjs::useshing()?这似乎是该包装的独特之处 ui <- fluidPage( shinyjs::useShiny(), shin

我闪亮的应用程序中的数据处理需要几秒钟。 我有一个下载按钮,我希望它要么在数据准备好之前不可点击,要么让下载处理程序等待准备好。 此时,在5秒之前单击下载按钮将返回默认html文件,5秒之后,该文件将按预期运行

我目前的解决方案是使用'shinyjs::hide/show'。我在下面展示了这一点

这是最佳实践吗?另外,为什么要在开始时使用
shinyjs::useshing()
?这似乎是该包装的独特之处

ui <- fluidPage(
shinyjs::useShiny(),
  shinyjs::hidden(downloadButton("downloadData", "Download"))
)

server <- function(input, output) {
   # Our dataset
  data <- mtcars

if(is.null(mtcars)){shinyjs::hide(“downloadData”)}
else{shinyjs::show(“downloadData”)}

   output$downloadData <- downloadHandler(
     filename = function() {
      paste("data-", Sys.Date(), ".csv", sep="")
     },
     content = function(file) {
      write.csv(data, file)}
  )
}

shinyApp(ui, server)

ui您所描述的内容完全合理,并且在过去的stackoverflow中已经提出过建议。您还可以使用disable/enable而不是hide/show,无论您觉得什么都是更好的用户体验


需要useShinyjs()来设置正在发生的所有R JavaScript通信。如果没有它,当您尝试从服务器调用shinyjs函数时,将不会发生任何事情,因为UI没有使用javascript进行初始化。自从我制作shinyjs以来,其他一些包也采用了这种模式,特别是处理javascript的包。

感谢您的回复,感谢您提供的优秀包。我将阅读更多关于包的其他功能的信息。