R语言 在Shiny中禁用按钮

dsekswqp  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(140)

我写了一些闪亮的代码,用户将输入一些输入到应用程序,然后单击一个动作按钮。动作按钮触发一堆模拟运行,需要很长时间,所以我想一旦动作按钮被点击它被禁用,使用户不能继续点击它,直到模拟运行。我遇到了shinyjs::enableshinyjs::disable函数,但一直很难使用它们。下面是我的服务器代码:

output$button1= renderUI({
        if(input$Button1 > 0)  {
          shinyjs::disable("Button1")
                tableOutput("table")
          shinyjs::enable("Button1")}
  })

然而,当我使用这段代码,并点击操作按钮什么也没发生。即,操作按钮不会变灰,也不会生成表格。但是,当我删除shinyjs::enable()命令时,即,

output$button1= renderUI({
            if(input$Button1 > 0)  {
              shinyjs::disable("Button1")
                    tableOutput("table")
}
      })

首先生成表,然后按钮变灰,但是我希望按钮变灰,然后表自己生成。
我做错了什么?

这是我根据Geovany的建议更新的代码,但它仍然不适合我

Button1Ready <- reactiveValues(ok = FALSE)

        observeEvent(input$Button1,  {
          shinyjs::disable("Button1")
          RunButton1Ready$ok <- FALSE
          RunButton1Ready$ok <- TRUE
  })

output$SumUI1= renderUI({
        if(Button1Ready$ok){
          tableOutput("table")
          shinyjs::enable("Button1")
        }
})

为了澄清,我还:

output$table <- renderTable({

#My code....

)}
ffscu2ro

ffscu2ro1#

我认为你在同一个React函数中使用了shinyjs::disableshinyjs::enable。你只会看到最后的效果。我建议你将disable/enable拆分为不同的React函数,并使用一个额外的React变量来控制按钮的重新激活。
我不知道你的代码是怎么样的,但是在下面的代码中,主要的思想已经被阐明了。

library(shiny)
library(shinyjs)

ui <- fluidPage(
  shinyjs::useShinyjs(),
  sidebarLayout(
    sidebarPanel(
      actionButton("Button1", "Run"),
      shinyjs::hidden(p(id = "text1", "Processing..."))
    ),
    mainPanel(
       plotOutput("plot")
    )
  )
)

server <- function(input, output) {

  plotReady <- reactiveValues(ok = FALSE)

  observeEvent(input$Button1, {
    shinyjs::disable("Button1")
    shinyjs::show("text1")
    plotReady$ok <- FALSE
    # do some cool and complex stuff
    Sys.sleep(2)
    plotReady$ok <- TRUE
  })  

  output$plot <-renderPlot({
    if (plotReady$ok) {
      shinyjs::enable("Button1")
      shinyjs::hide("text1")
      hist(rnorm(100, 4, 1),breaks = 50)
    }
  })
}

shinyApp(ui, server)
mkh04yzy

mkh04yzy2#

确保你已经安装了shinyjs包并包含在你的Shiny应用中:install.packages("shinyjs")library(shinyjs)
请注意,在server.R文件中调用shinyjs::disable(id)不足以禁用输入或元素。您还应该在ui.R文件中添加shinyjs::useShinyjs()行,以启用shinyjs包的使用,并查看神奇的效果。
在ui.R文件中:library(shiny)library(shinyjs)

ui <- fluidPage(
  shinyjs::useShinyjs(), # Required to enable shinyjs functionality
  ... Rest of your UI code
)

也许这条线是旧的,但这仍然是有帮助的!

相关问题