如何获得一个闪亮的反应动作按钮来激活日期输入?

How to get a Shiny reactive action button to activate date inputs?

我正在构建一个闪亮的应用程序,我需要在其中获取输入的日期并将它们用于仅在单击按钮时运行的代码部分。

对于我来说,我无法在此处或文档中找到可以开始工作的示例。

对于 reprex 示例,我只想在单击 'Run Report' 按钮后在主面板中打印输入的日期。

我已经将服务器代码迭代了几个小时,但无法让它工作。

UI:

fluidPage(titlePanel('File download'),
          sidebarLayout(
            sidebarPanel(
              dateRangeInput(
                inputId = "date.range",
                label   = "Select Date Range",
                start   = Sys.Date() - 2,
                end     = Sys.Date() - 1
              ),
              actionButton(inputId   = "runReport",
                           label     = "Run Report")
            ),
            mainPanel(verbatimTextOutput("date.text"))
          ))

...和服务器:

function(input, output, session) {
  eventReactive(input$runReport, {
    output$date.text <- renderPrint({
      paste0(as.character(input$date.range[1]), "to", as.character(input$date.range[2]))
    })
  })
  
}

这个怎么样:

ui <- fluidPage(titlePanel('File download'),
          sidebarLayout(
            sidebarPanel(
              dateRangeInput(
                inputId = "date.range",
                label   = "Select Date Range",
                start   = Sys.Date() - 2,
                end     = Sys.Date() - 1
              ),
              actionButton(inputId   = "runReport",
                           label     = "Run Report")
            ),
            mainPanel(verbatimTextOutput("date.text"))
          ))
server <- function(input, output, session) {
  dates <- eventReactive(input$runReport, {
    input$date.range
  })
  output$date.text <- renderPrint({
    paste0(as.character(dates()[1]), " to ", as.character(dates()[2]))
  })

}
shinyApp(ui, server)

在上面的内容中,您使用 eventReactive() 仅在按下按钮时更新 dates() 对象。然后你不需要 print 语句周围的反应,因为它的输入会在按下按钮时自动更新。 很有启发性。