使用操作按钮刷新主面板屏幕

时间:2017-04-20 13:38:06

标签: r shiny

我正在构建一个闪亮的应用程序,我想刷新主面板屏幕。这是一个示例代码。我有一个提交按钮来显示数据,我有一个重新清除按钮来清除屏幕。我不太确定如何编写R中的重新刷新按钮,因为我是新手。感谢您查看

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) {
   observeEvent(input$submit1, {
     lapply(1:input$amountTable, function(amtTable) {
       output[[paste0('T', amtTable)]] <- DT::renderDataTable({
       iris[1:amtTable, ]
       })
     })
   })

  output$dt <- renderUI({
    tagList(lapply(1:10, function(i) {
    dataTableOutput(paste0('T', i))
   }))
 })

}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:3)

如果使用刷新按钮,您可以添加从renderUI()返回任何内容的可能性。 由于重置动作按钮不是那么简单,您必须使用带有反应变量的变通方法。

if(global$refresh) return()

您可以使用刷新和提交按钮控制此反应变量 例如。 if(input$refresh1) isolate(global$refresh <- TRUE) 你包装在单独的观察功能。 完整代码见下文:

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)