R shiny:如何使用shiny模块中的removeUI隐藏动作按钮

lrl1mhuk  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(135)

我想隐藏一个操作按钮,一旦它被单击,当输入不为空。
类似的问题也被问过here,提供的解决方案效果很好。
但是,我不知道如何使它在一个闪亮的模块工作。
下面是我的示例代码:

# module UI
choice_ui <- function(id) {
  ns <- NS(id)
  tagList(
    textInput(inputId = ns("myInput"), label = "write something"),
    actionButton(inputId = ns("click"), label = "click me"),
    verbatimTextOutput(outputId = ns("text"))
    )
  }

# module server
choice_server <- function(id) {
  moduleServer(id, function(input, output, session){
    observeEvent(input$click, {
      x <- input$myInput
      output$text <- renderPrint({x})
      req(x)
      removeUI(selector = paste0("#click", id), session = session)
      })
    })
  }

# Application
library(shiny)
app_ui <- function() {
  fluidPage(
    choice_ui("choice_ui_1")
  )
}

app_server <- function(input, output, session) {
  choice_server("choice_ui_1")
}

shinyApp(app_ui, app_server)
8yoxcaq7

8yoxcaq71#

在模块服务器上,获取会话名称空间:

ns <- session$ns

removeUI()中按如下方式使用它:

removeUI(selector = paste0("#", ns("click")), session = session)

下面是一个完整的reprex:

# module UI
choice_ui <- function(id) {
  ns <- NS(id)
  tagList(
    textInput(inputId = ns("myInput"), label = "write something"),
    actionButton(inputId = ns("click"), label = "click me"),
    verbatimTextOutput(outputId = ns("text"))
  )
}

# module server
choice_server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    observeEvent(input$click, {
      x <- input$myInput
      output$text <- renderPrint({
        x
      })
      req(x)
      removeUI(selector = paste0("#", ns("click")), session = session)
    })
  })
}

# Application
library(shiny)
app_ui <- function() {
  fluidPage(
    choice_ui("choice_ui_1")
  )
}

app_server <- function(input, output, session) {
  choice_server("choice_ui_1")
}

shinyApp(app_ui, app_server)

相关问题