闪亮的 downloadHandler 等待数据准备好

Sim*_*mon 5 r shiny

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

\n\n

我当前的解决方案是使用`shinyjs::hide/show。I\xe2\x80\x99ve 在下面显示了这一点。

\n\n

这是最佳实践吗?另外,为什么一shinyjs::useShiny()开始呢?它似乎是那个包所独有的。

\n\n
ui <- fluidPage(\nshinyjs::useShiny(),\n  shinyjs::hidden(downloadButton("downloadData", "Download"))\n)\n\nserver <- function(input, output) {\n   # Our dataset\n  data <- mtcars\n\nif(is.null(mtcars)){shinyjs::hide(\xe2\x80\x9cdownloadData\xe2\x80\x9d)}\nelse{shinyjs::show(\xe2\x80\x9cdownloadData\xe2\x80\x9d)}\n\n   output$downloadData <- downloadHandler(\n     filename = function() {\n      paste("data-", Sys.Date(), ".csv", sep="")\n     },\n     content = function(file) {\n      write.csv(data, file)}\n  )\n}\n\nshinyApp(ui, server)\n
Run Code Online (Sandbox Code Playgroud)\n

Dea*_*ali 3

你所描述的完全合理,并且过去已经在 stackoverflow 上建议过。您还可以使用禁用/启用而不是隐藏/显示,只要您觉得更好的用户体验即可。

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