【问题标题】:Simple refresh button in flexdashboard/Shiny? Rflexdashboard/Shiny中的简单刷新按钮? R
【发布时间】:2022-01-12 19:53:23
【问题描述】:

我有一个谷歌表单/调查,可将回复保存到谷歌表格中。

来自 google 工作表的数据将进入我的 flexdashboard/shiny 应用程序,但如果在有人使用该应用程序时保存了响应 - 查看响应的唯一方法是实际单击浏览器中的刷新。

我想添加一个无需用户单击刷新即可重新运行应用程序的按钮?这可能吗?

这是我编写的一些代码 - 我将一些代码放在一起,但它似乎不起作用。

---
title: "Test "
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
library(DT)
library(gsheet)
```



Inputs {.sidebar data-width=300}
-----------------------------------------------------------------------

```{r}

jscode <- "shinyjs.refresh = function() { history.go(0); }"


actionButton(jscode, "Refresh")

observeEvent(input$reset, {

})

```

Column
-------------------------------------


### Chart A

```{r}

data <- gsheet2tbl('https://docs.google.com/spreadsheets/d/1CB2IQHb3g5d8KsEr-_lJNXPKnTBn2nhz_-AzBjRyRK4/edit#gid=0')

datatable(data
  ,
          editable = TRUE,
  options = list(
    columnDefs = list(list(className = 'dt-center', targets = "_all")))
)
```

【问题讨论】:

    标签: r shiny flexdashboard


    【解决方案1】:

    如果不喜欢重置按钮,我们可以使用invalidateLater(10000) 每 10 秒获取一次数据。

    应用程序:

    library(shiny)
    library(shinyjs)
    library(DT)
    library(gsheet)
    
    ui <- fluidPage(
      useShinyjs(),
      actionButton("reset", inputId = "Refresh"),
      DTOutput("table")
    )
    
    server <- function(input, output, session) {
      observeEvent(input$Refresh, {
        refresh()
      })
    
      data <- reactive({
        #invalidateLater(10000)
        gsheet2tbl("https://docs.google.com/spreadsheets/d/1CB2IQHb3g5d8KsEr-_lJNXPKnTBn2nhz_-AzBjRyRK4/edit#gid=0")
      })
    
      output$table <- renderDataTable({
        datatable(data(),
          editable = TRUE,
          options = list(
            columnDefs = list(list(className = "dt-center", targets = "_all"))
          )
        )
      })
    }
    
    shinyApp(ui, server)
    

    第三种选择是在按下按钮时直接重新渲染数据:

    代码:

    library(shiny)
    library(shinyjs)
    library(DT)
    library(gsheet)
    
    data <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1CB2IQHb3g5d8KsEr-_lJNXPKnTBn2nhz_-AzBjRyRK4/edit#gid=0")
    
    ui <- fluidPage(
      useShinyjs(),
      actionButton("reset", inputId = "Refresh"),
      DTOutput("table")
    )
    
    server <- function(input, output, session) {
    
    
       observeEvent(input$Refresh, {
        
        df <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1CB2IQHb3g5d8KsEr-_lJNXPKnTBn2nhz_-AzBjRyRK4/edit#gid=0")
        
        output$table <- renderDT({
        datatable(df,
                  editable = TRUE,
                  options = list(
                      columnDefs = list(list(className = "dt-center", targets = "_all"))
                  )
        )})
        
      })
      
      #this will render once at the start of the app
      output$table <- renderDataTable({
        
        datatable(data,
          editable = TRUE,
          options = list(
            columnDefs = list(list(className = "dt-center", targets = "_all"))
          )
        )
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 感谢分享此代码,此代码有效,但我得到的应用程序是使用 flexdashboard 构建的 - 鉴于 flexdashboard 的限制与纯闪亮相比,是否仍然可以刷新谷歌表中的数据。
    • 我还认为另一个限制是应用正在发布 shinyapps.io,这有点慢。
    猜你喜欢
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2019-07-24
    • 1970-01-01
    • 2019-03-24
    • 2018-03-14
    相关资源
    最近更新 更多