在 shiny 中传递 URL 参数时,如何避免将所有内容包装在 observeEvent() 中?
How to avoid wrapping everything in observeEvent() when passing URL parameters in shiny?
我知道使用类似这样的代码:
library(shiny)
ui <- fluidPage(
mainPanel(
textOutput("Query_String")
)
)
server <- function(input, output, session) {
observeEvent(session$clientData$url_search,{
Query <- session$clientData$url_search
output$Query_String <- renderText(Query)
# Long list of operations dependant on the parameters passed in the URL
})
}
shinyApp(ui = ui, server = server)
可以让我通过 URL 查询将参数读入我闪亮的应用程序。然而,似乎我基本上必须将我的整个服务器内容包装到一个大的 observe() 或 observeEvent() 中以创建所需的反应上下文。
有什么办法可以避免这种情况吗?
为了避免在仅更改一个项目时重新计算所有内容,人们希望创建多个单独的观察而不是一个大观察。应该在函数中重构长代码,例如process_query
保持服务器功能小,允许读取整体结构。重要的中间结果可以重构为它们自己的反应值(此处 query
)。 output$Query_String
不需要嵌套在另一个反应上下文中。
process_query <- function(url) {
# many steps to process the url
return(url)
}
server <- function(input, output, session) {
query <- reactive(process_query(session$clientData$url_search))
output$Query_String <- renderText(query())
}
我知道使用类似这样的代码:
library(shiny)
ui <- fluidPage(
mainPanel(
textOutput("Query_String")
)
)
server <- function(input, output, session) {
observeEvent(session$clientData$url_search,{
Query <- session$clientData$url_search
output$Query_String <- renderText(Query)
# Long list of operations dependant on the parameters passed in the URL
})
}
shinyApp(ui = ui, server = server)
可以让我通过 URL 查询将参数读入我闪亮的应用程序。然而,似乎我基本上必须将我的整个服务器内容包装到一个大的 observe() 或 observeEvent() 中以创建所需的反应上下文。 有什么办法可以避免这种情况吗?
为了避免在仅更改一个项目时重新计算所有内容,人们希望创建多个单独的观察而不是一个大观察。应该在函数中重构长代码,例如process_query
保持服务器功能小,允许读取整体结构。重要的中间结果可以重构为它们自己的反应值(此处 query
)。 output$Query_String
不需要嵌套在另一个反应上下文中。
process_query <- function(url) {
# many steps to process the url
return(url)
}
server <- function(input, output, session) {
query <- reactive(process_query(session$clientData$url_search))
output$Query_String <- renderText(query())
}