我正在创建一个闪亮的应用程序,从谷歌驱动器中的谷歌工作表文档中获取数据。在下面的MWE中,它只是提供了表格。
我希望应用程序显示google工作表的当前状态,因此我将invalidateLater添加到从google驱动器读取数据的反应式表达式。
缺点是每次表格都会刷新,即使数据没有改变。知道怎么处理吗?
MWE:
ui.R
library(shiny)
library(shinydashboard)
header <- dashboardHeader(title = "Title")
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("All", tabName = "All", icon = icon("fa fa-circle")
)
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName = "All",
fluidRow( box(width=12,title="Table",
solidHeader = TRUE,status = "primary",
dataTableOutput(outputId="Munt")
#plotOutput(outputID="Munt")
)
)
)
))
ui <- dashboardPage(header, sidebar,body)
server.R
server<-function(input,output,session){
session$onSessionEnded(function() {
stopApp()
})
DF<-reactive({
invalidateLater(60000,session=session)
temp<-gs_read(muntgeg)
temp})
output$Munt<-renderDataTable(DF())
}
global.R
library(shiny)
library(knitr)
library(googlesheets)
muntgeg<-gs_title("RA-Munten")
答案 0 :(得分:1)
嗯,这种行为当然是强迫的:)但是,也许一个解决方案对你来说很好。 您可以将以下内容添加到服务器:
global <- reactiveValues(df = "")
observe({
if(! identical(global$df,DF())) global$df = DF()
})
然后你有一个只在DF()
实际发生变化时才更新的变量。
然后让output$Munt
依赖于global$df
output$Munt<-renderDataTable(global$df)