R闪亮:按一下即可关闭actionButton的类

时间:2020-07-01 23:38:34

标签: r shiny

我希望有一个actionButton,它可以基于按钮单击在“ btn成功”,“ btn警告”,“ btn危险”之间循环其类。不幸的是,我似乎无法弄清楚如何将该值输入到actionButton的类参数中。

library(shiny)

v <- reactiveValues(btn_status = "btn-secondary")

ui <- fluidPage(

# Application title
titlePanel("Change Button Color on click"),


# Create an action button that cycles through 3 bootstrap colors and can be reset
mainPanel(
    actionButton("run","L", class = isolate(v$btn_status)),
    actionButton("reset", "Clear"), 
    textOutput("status"),
)

)

server <- function(input, output) {

observeEvent(input$run, {
    v$btn_status <- "btn-success"
})    

observeEvent(input$reset, {
    v$btn_status <- "NULL"

})  

output$status <- renderText({
    v$btn_status
})

}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:2)

我尚不清楚您要做什么(请参阅上面的评论);但是我认为你在追求这样的东西:

library(shiny)

valid_status <- c("btn-success", "btn-warning", "btn-danger")

ui <- fluidPage(
    titlePanel("Change Button Color on click"),
    mainPanel(
        uiOutput("statusButton"),
        actionButton("reset", "Clear"),
        textOutput("status"),
    )
)

server <- function(input, output, session) {

    v <- reactiveValues(button_idx = 1)
    get_button_idx <- reactive(v$button_idx)

    output$statusButton <- renderUI({
        idx <- get_button_idx()
        actionButton("run", "L", class = valid_status[idx])
    })

    observeEvent(input$run, {
        v$button_idx <- ifelse(v$button_idx < 3, v$button_idx + 1, 1)
    })

    observeEvent(input$reset, {
        v$button_idx <- 1
    })

    output$status <- renderText({
        valid_status[v$button_idx]
    })
}

shinyApp(ui = ui, server = server)

生产

enter image description here

关键是使用reactive中的renderUI值来更新class的{​​{1}}。要对齐按钮,可以在必要时使用actionButton