我正在尝试更新
ActionButton
的标签和图标,我知道也有类似的问题,但我似乎无法让它发挥作用。
nameUI <- function(id) {
ns <- NS(id)
tagList(
actionButton(NS(id, "run"), "Run", icon = icon("bolt"))
)
}
nameServer <- function(id) {
moduleServer(id, function(input, output, session) {
observeEvent(input$run, {
ns <- session$ns
updateActionButton(session, inputId = ns("run"), label = "Running", icon = icon("sync", class = "fa-spin"))
print("Running")
Sys.sleep(3)
updateActionButton(session, inputId = ns("run"), label = "Run Done", icon = icon("bolt"))
print("Done")
})
})
}
app <- function() {
ui <- fluidPage(
nameUI("test")
)
server <- function(input, output, session) {
nameServer("test")
}
shinyApp(ui, server)
}
app()
模块的任何问题都与仅在
updateActionButton
末尾执行的 observeEvent
事件的主要问题无关,因此我将其排除在外。您可以在这里看到,只有最后的 updateActionButton
才有效果。 bslib::input_task_button
做了你想做的事。唯一的限制是,虽然有 bslib::update_task_button
,但它似乎无法像 label
那样更新 updateActionButton
值。如果这是必要的,那么使用一些 javascript 就可以实现。
library(shiny)
ui <- fluidPage(
actionButton("run1", "Run", icon = icon("bolt")),
bslib::input_task_button("run2", "Run", icon = icon("bolt"), label_busy = "Running")
)
server <- function(input, output, session) {
observeEvent(input$run1, {
updateActionButton(session, "run1", label = "Running", icon = icon("sync", class = "fa-spin"))
Sys.sleep(3)
updateActionButton(session, "run1", label = "Run Done", icon = icon("bolt"))
})
observeEvent(input$run2, {
Sys.sleep(3)
})
}
shinyApp(ui = ui, server = server)