我打算使用renderUI在我闪亮的应用程序中显示一些可选的额外按钮。我希望在同一个renderUI调用中插入新按钮。我写了一个renderUI探索,如果第一个按钮的输入不为空且(&&)为TRUE,则仅渲染第二个按钮。它不起作用,因为第一个按钮在检查时会再次快速取消选中。我通过分成两个renderUI调用来解决问题。
我的问题是:
library(shiny)
ui = fluidPage(
uiOutput("checkUI")
)
server = function(input,output) {
output$checkUI = renderUI({
list(
checkboxInput('check1',"check me first"),
if(!is.null(input$check1)&&input$check1==T) {
checkboxInput('check2',"check me to win")
} else {
NULL
}
)
})
}
shinyApp(ui,server)
但这有效......
ui = fluidPage(
uiOutput("checkUI"),
uiOutput("textUI")
)
server = function(input,output) {
#UI first button
output$checkUI = renderUI({
list(
checkboxInput('check1',"check me first")
)
})
#UI second button
output$textUI = renderUI({
list(
if(!is.null(input$check1) && input$check1)
checkboxInput('check2',"check me to win") else NULL
)
})
}
shinyApp(ui,server)
答案 0 :(得分:1)
您的第一段代码失败,因为每次输入发生更改时,renderUI都会运行,因此当您选中第一个复选框时。既然你有:
checkboxInput('check1',"check me first")
renderUI立即重置input$check1
,然后再次运行renderUI
,取消设置复选框。这就是第二个复选框短暂闪烁的原因。
幸运的是,这是一个常见的问题,因此conditionalPanel
s有一个闪亮的解决方案:
library(shiny)
ui = fluidPage(
checkboxInput('check1',"check me first"),
conditionalPanel(
condition = "input.check1 == true",
checkboxInput("check2", "check me to win")
)
)
server = function(input,output){
}
shinyApp(ui,server)