R Shiny conditionalPanel结合UI与服务端条件控制下载按钮显隐问询
实现方案
要实现两个条件同时满足才展示下载按钮的需求,核心是将服务端计算的筛选后数据行数同步到前端供条件判断使用,具体修改如下:
修改说明
- 在服务端新增输出值传递筛选后数据的行数,设置
suspendWhenHidden = FALSE保证该值即使不在UI中直接渲染也会持续更新 - 修改
conditionalPanel的判断规则,同时匹配下拉选择为yes、数据集行数≥20两个条件 - 补充下载按钮对应的下载处理逻辑
完整可运行代码
library(shiny) library(shinyWidgets) library(dplyr) library(DT) df <- tibble(x=1:30, y=51:80, z=c(rep("small_chunk", 7), rep("large_chunk", 23))) ui <- fluidPage( sidebarLayout( sidebarPanel( pickerInput("my_selection","Select data chunk", choices=c("large_chunk", "small_chunk"), selected="small_chunk", options = list(`actions-box` = TRUE,`selected-text-format` = "count > 3"),multiple = F), pickerInput("show","Show Extra Button", choices=c("yes", "no"), selected="yes", options = list(`actions-box` = TRUE,`selected-text-format` = "count > 3"),multiple = F), # 修改条件判断,新增服务端输出的行数判断 conditionalPanel( condition = "input.show == 'yes' && output.row_count >= 20", downloadButton("downloadData","Download aggregated data" ) ) ), mainPanel( DTOutput("table") ) ) ) server <- function(input, output) { data_reactive <- reactive({ df %>% filter(z %in% input$my_selection ) }) # 新增:输出筛选后数据的行数 output$row_count <- reactive({ nrow(data_reactive()) }) # 关键配置:保证隐藏的输出也会持续更新 outputOptions(output, "row_count", suspendWhenHidden = FALSE) output$table <- renderDT({datatable(data_reactive())}) # 新增:下载逻辑,可根据实际需求调整 output$downloadData <- downloadHandler( filename = function() { paste0("aggregated_data_", Sys.Date(), ".csv") }, content = function(file) { write.csv(data_reactive(), file, row.names = FALSE) } ) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者larry77
相关产品推荐
相关产品推荐

