すべての UI コードをサーバー関数に移動せずに、モジュール サーバー関数が失敗した場合に、空白の UI を表示する (またはモジュール UI を破棄する) 方法は?
簡単な再現可能な例:
library(shiny)
my_module_ui <- function(id) {
ns <- NS(id)
tags$div(
tags$h1("Don't show me if my_module_server fails!"),
plotOutput(ns("my_plot"))
)
}
my_module_server <- function(input, output, session) {
tryCatch({
my_data <- cars * "A" # fail for demo
# my_data <- cars
output$my_plot <- renderPlot({
cars2 <- my_data + rnorm(nrow(my_data))
plot(cars2)
})
}, error=function(cond) {
message("Destroy UI here!")
})
}
ui <- fluidPage(
my_module_ui("my_id")
)
server <- function(input, output, session) {
callModule(my_module_server, "my_id")
}
shinyApp(ui, server)
私の現在の解決策は、uiOutput()
inだけを持ちmy_module_ui
、サーバー関数で ui 全体をレンダリングすることです。すべてのUIコンポーネントがモジュールサーバー機能内に配置されていると、大きなモジュールが非常に乱雑になるため、これを防ぎたいです。
callModule()
さらに、UI を破棄する値を返すことを避け、代わりにサーバー関数内からこれを行うこともできれば幸いです。
ありがとう!