conditionalPanel和uiOutput/req模式之间的区别



考虑下面的示例应用程序,它演示了两种基于条件显示UI的方法:

library(shiny)
ui <- fluidPage(
tagList(
checkboxInput("toggle", "Toggle"),
conditionalPanel(
condition = "output.condition",
tags$p("Output from conditionalPanel")
),
uiOutput("ui")
)
)
server <- function(input, output, session) {

# conditionalPanel
output$condition <- reactive(input$toggle)
outputOptions(output, "condition", suspendWhenHidden = FALSE)

# uiOutput
output$ui <- renderUI({
req(isTRUE(input$toggle))
tags$p("Output from uiOutput")
})

}
shinyApp(ui, server)

就前端而言,conditionalPaneluiOutput/req模式的行为似乎相似。是否有任何差异,特别是与性能有关的差异,会使一种模式更有益?

这两种方法确实有不同的用途。CCD_ 4创建一个JavaScript表达式;倾听";例如输入是TRUE还是FALSE。服务器端不需要发生任何事情。

相比之下,CCD_ 7是非常灵活的。当然,它可以模仿conditionalPanel的行为,但也能够通过创建不同的HTML(UI(代码来输出基本上任何内容。

关于速度:conditionalPanel几乎总是更快。此外,不是性能应该是两个选项之间的决定因素,而是目标应该。

示例应用程序

library(shiny)
ui <- fluidPage(
tagList(
checkboxInput("toggle", "Toggle"),
conditionalPanel(
# listens whether toggle is TRUE or FALSE
condition = "input.toggle",
tags$p("Output from conditionalPanel")
),
uiOutput("ui")
)
)
server <- function(input, output, session) {
# create a plot
output$myplot <- renderPlot({
plot(mtcars$mpg, mtcars$cyl)
})
# create some text
output$mytext <- renderText({
"I am pointless"
})

# uiOutput
output$ui <- renderUI({
input$toggle
if (rnorm(1) > 0){
plotOutput("myplot")
} else {
textOutput("mytext")
}
})
}
shinyApp(ui, server)

最新更新