如何让开关在Shiny中独占?

How to make switches exclusive in Shiny?

在 Shiny 中,我希望有两个(漂亮的)开关可以离开:

所需的行为是第一个开关 TRUE 自动将第二个开关的值设置为 FALSE。反之亦然。

我尝试使用以下脚本,但效果不理想。事实上,在正确更改值之前,我需要在开关上单击 两次

library(shiny)
library(shinyWidgets)

# Define UI
ui <- fluidPage(
    
    # Application title
    titlePanel("Update the switch"),
    
    # Pretty switches 
    prettySwitch('one', 'one'),
    prettySwitch('two', 'two')
    
)

# Define server logic
server <- function(input, output) {
    
    observeEvent({input$one == TRUE}, {
        updateCheckboxInput(
            inputId = "two",
            value = F
        )
    })
    
    observeEvent({input$two == TRUE}, {
        updateCheckboxInput(
            inputId = "one",
            value = F
        )
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

我认为问题在于你如何放置 observeEvent,只需让它依赖于按钮,不要在第一个参数中指定条件,你可以在 [=11 中完成其余部分=] 本身。此外,一个好的指示是坚持 bool:TRUEFALSE 的完整定义,尽量不要将其缩写为一种好的做法

library(shiny)
library(shinyWidgets)

# Define UI
ui <- fluidPage(
    
    # Application title
    titlePanel("Update the switch"),
    
    # Pretty switches 
    prettySwitch('one', 'one'),
    prettySwitch('two', 'two')
    
)

# Define server logic
server <- function(input, output,session) {
    
    observeEvent(input$one, {
        if(input$one == TRUE){
            updateCheckboxInput(session,inputId = "two",value = FALSE)
        }
    }, ignoreInit = TRUE)
    
    observeEvent(input$two,{
        if(input$two == TRUE){
            updateCheckboxInput(session,inputId = "one",value = FALSE)
        }
    }, ignoreInit = TRUE)
}

# Run the application 
shinyApp(ui = ui, server = server)