r - 闪亮的 downloadHandler 等待数据准备好
问题描述
我闪亮的应用程序中的数据需要几秒钟来处理。我有一个下载按钮,我希望它要么在数据准备好之前不可点击,要么让下载处理程序等到准备好。目前在 5 秒前单击下载按钮会返回默认的 html 文件,然后在 5 秒后它会按预期运行。
我目前的解决方案是使用 `shinyjs::hide/show. 我在下面展示了这个。
这是最佳实践吗?另外,为什么shinyjs::useShiny()
一开始呢?它似乎对那个包来说是独一无二的。
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)
解决方案
您所描述的完全合理,并且过去曾在 stackoverflow 上提出过建议。您也可以使用禁用/启用而不是隐藏/显示,无论您觉得更好的用户体验如何。
useShinyjs() 需要设置所有正在发生的 R <--> JavaScript 通信。没有它,当您尝试从服务器调用 shinyjs 函数时,什么都不会发生,因为 UI 没有使用 javascript 初始化。自从我制作了 shinyjs 以来,其他一些包也采用了这种模式,尤其是也处理 javascript 的包。
推荐阅读
- amazon-web-services - AWS Amplify Cloud Logic:访问 Cognito 自定义参数
- android-studio-3.0 - 如何在 AndroidStudio 中调整位图的大小?
- javascript - 一个 Web 应用程序的多个项目配置
- python - 在 AllenNlp 管道中在哪里添加 SentencePiece 标记化?
- git - jenkins 中 git 的权限问题
- ios - 通过两个 ViewController 传输数据
- c# - 如何在 xamarin android 中隐藏片段的 SetContentView 布局的可见性?
- python - 在加载之前如何与页面交互?
- windows - 如何在 C++ 中检查用户使用的是 NVIDIA 还是 AMD
- angular - REST 调用在 Observable.subscribe 的多步执行时被双重执行