我想在点击后删除一个actionButton。我以前成功使用过shinyjs::hide("init")
,但现在我想完全删除按钮。我试过以下代码
问题源于模块化。它会根据唯一ID GlobClass$Init
更新向量userPID
。代码版本的非模块化工作。
library(shiny)
### Modularized Code
#' UserSide Function to Create Button
InitializeUI <- compiler::cmpfun( function(id) {
ns <- NS(id)
actionButton( ns("init"), h4("Initialize") )
})
#' ServerSide Function to Update reactive Vector and Delete Button
Initialize <- compiler::cmpfun( function(input, output, session,
GlobClass, userPID ) {
observeEvent( input$init, {
cat("click\n")
removeUI(selector='#init', immediate=TRUE)
GlobClass$Init[userPID] <- TRUE
}, autoDestroy=TRUE)
})
### User.R
ui <- fluidPage( InitializeUI("init") )
### Server.R
GlobClass <- reactiveValues(Init=c(FALSE, FALSE))
server <- function(input,output) {
userPID <- sample( 1:2,1)
cat(userPID, "\n")
callModule( Initialize, "init", GlobClass, userPID )
}
### Run Application
shinyApp(ui, server)
答案 0 :(得分:2)
以下似乎对我来说很好。实施方面是否存在差异?
library(shiny)
ui <- fluidPage(
actionButton('init','Click')
)
# The server function
server <- function(input,output)
{
observeEvent(input$init, {
removeUI(selector='#init', immediate=TRUE)
}, autoDestroy=TRUE)
}
shinyApp(ui, server)
答案 1 :(得分:0)
您可以这样做:
actionButton(
ns("init"), h4("Initialize"),
onclick = "var $btn=$(this); setTimeout(function(){$btn.remove();},0);"
)
(并且不要使用removeUI
)。