【发布时间】:2018-01-01 18:41:09
【问题描述】:
我有一个带有多个 actionButton 命令的 Shiny 应用程序。当我单独单击每个按钮(例如,绘制图表或呈现表格)时,我希望我的主面板能够自动更新/刷新相应的图表或表格。相反,我的 Shiny 应用程序只是将一个 actionButton 的输出附加到同一面板中另一个 actionButton 的先前输出。
从以前的 Stack Overflow 帖子来看,似乎解决此问题的唯一方法是实现刷新按钮。例如,在以下 MWE 中:
library(DT)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("amountTable", "Amount Tables", 1:10),
actionButton("submit1" ,"Submit", icon("refresh"),
class = "btn btn-primary"),
actionButton("refresh1" ,"Refresh", icon("refresh"),
class = "btn btn-primary")
),
mainPanel(
# UI output
uiOutput("dt")
)
)
)
server <- function(input, output, session) {
global <- reactiveValues(refresh = FALSE)
observe({
if(input$refresh1) isolate(global$refresh <- TRUE)
})
observe({
if(input$submit1) isolate(global$refresh <- FALSE)
})
observeEvent(input$submit1, {
lapply(1:input$amountTable, function(amtTable) {
output[[paste0('T', amtTable)]] <- DT::renderDataTable({
iris[1:amtTable, ]
})
})
})
output$dt <- renderUI({
if(global$refresh) return()
tagList(lapply(1:10, function(i) {
dataTableOutput(paste0('T', i))
}))
})
}
shinyApp(ui, server)
来源:https://stackoverflow.com/a/43522607
在显示新输出之前,您需要单击刷新按钮以清除先前的输出,否则它们将相互堆叠。
有没有办法在不显式单击刷新按钮的情况下动态/反应性地刷新主面板?例如,最好单击一个新的actionButton 按钮来显示下一个输出并让它同时自动刷新主面板。请随时提供您自己的 MWE,以展示此过程如何工作。
【问题讨论】: