0

我想在用户打开/登陆“tab1”时自动运行操作按钮。因此,我希望自动打印日期,而不是单击刷新按钮来查看日期。有没有办法做到这一点?我的真实代码比这个简单的例子更复杂。但是,它展示了我想做的事情。谢谢!

library(shiny)

ui <- fluidPage(
  shiny::tabPanel(value = 'tab1', title = 'Data page',
                  br(),
                  shiny::actionButton("btn", "Refresh!"),
                  br(),
                  shiny::verbatimTextOutput("out")
  )
)

server <- function(input, output, session) {
   curr_date <- shiny::eventReactive(input$btn, {
     format(Sys.Date(), "%c")
   })

   output$out <- shiny::renderText({
     print(curr_date())

   })
}

shinyApp(ui, server)
4

2 回答 2

2

您可以curr_date对标签集做出反应:

library(shiny)

ui <- fluidPage(
  tabsetPanel(
    tabPanel(value = 'tab1', title = 'Data page',
             br(),
             actionButton("btn", "Refresh!"),
             br(),
             verbatimTextOutput("out")
    ),
    tabPanel(value = 'tab2', title = 'Other tab'),
    id = "tabset"
  )
)

server <- function(input, output, session) {
  curr_date <- eventReactive(list(input$btn, input$tabset), {
    req(input$tabset == 'tab1')
    format(Sys.time(), "%c")
  })

  output$out <- renderText({
    print(curr_date())
  })
}

shinyApp(ui, server)
于 2020-02-11T18:43:19.203 回答
1

您应该为此使用reactiveValues()和。observeEvent()内部服务器功能:

server <- function(input, output, session) {

  text_out <- reactiveValues(date = format(Sys.Date(), "%c"))

  observeEvent(input$btn, {
    text_out$date <- "something else"
  })

  output$out <- renderText({
     print(text_out$date)
}
于 2020-02-11T18:09:26.297 回答