我创建了一个Shiny应用程序,它从数据库中提取数据.我在UI部分有许多输入,在服务器部分有许多输出.
在服务器部分,我有一个反应函数,它使用一些输入构建查询,然后从数据库中提取数据,例如:
queriedData <- reactive({
query <- paste0(...,input$a,...);
return(db$find(query))
})
Run Code Online (Sandbox Code Playgroud)
在输出槽中,我指的是使用中的数据
x <- queriedData()
Run Code Online (Sandbox Code Playgroud)
我的问题是:
回答您的问题:
queriedData(这是一个反应式表达式)将被无效,因此每次它收到来自 的无效标志时都会更新input$a。由于数据库查询是该计算的一部分,因此您的假设是正确的。input$a没有改变并且因此queriedData没有失效时,它只是返回缓存的数据。input$a然而,什么时候发生变化,queriedData就会重新计算,因此会产生一个查询。queriedData。请记住,反应式表达式不一定需要是输入。举个例子:
query <- reactive({paste0(...,input$a,...)})
queriedData <- reactive({
db$find(query())
})
output$thedata <- renderDataTable(queriedData())
Run Code Online (Sandbox Code Playgroud)
现在 的更改input$a将使 无效query,从而触发其重新计算。query,一个反应式表达式,将使 无效queriedData(),触发其重新计算。这将使 无效output$thedata,并因此导致该部分被重新计算,从而导致数据表中显示新数据。