我写了一些闪亮的代码,用户将输入一些输入到应用程序,然后单击一个动作按钮。动作按钮触发一堆模拟运行,需要很长时间,所以我想一旦动作按钮被点击它被禁用,使用户不能继续点击它,直到模拟运行。我遇到了shinyjs::enable
和shinyjs::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....
)}
2条答案
按热度按时间ffscu2ro1#
我认为你在同一个React函数中使用了
shinyjs::disable
和shinyjs::enable
。你只会看到最后的效果。我建议你将disable/enable
拆分为不同的React函数,并使用一个额外的React变量来控制按钮的重新激活。我不知道你的代码是怎么样的,但是在下面的代码中,主要的思想已经被阐明了。
mkh04yzy2#
确保你已经安装了shinyjs包并包含在你的Shiny应用中:
install.packages("shinyjs")
library(shinyjs)
请注意,在server.R文件中调用
shinyjs::disable(id)
不足以禁用输入或元素。您还应该在ui.R文件中添加shinyjs::useShinyjs()
行,以启用shinyjs包的使用,并查看神奇的效果。在ui.R文件中:library(shiny)library(shinyjs)
也许这条线是旧的,但这仍然是有帮助的!