R Shiny - 在值更改时隐藏输出

R Shiny - Hiding an Output When a Value Changes

我想制作一个表单类型的 Shiny 应用程序,当用户单击和操作按钮时会显示输出,但如果输入值发生变化,输出随后会被隐藏。

这是一个例子:

library(shiny)
library(shinyjs)

ui <- fluidPage(
  radioButtons("myRadioButton", label = h4("Radio Input"),
               choices = list("A" = 0,
                              "B" = 1,
                              "C" = 2),
               selected = character(0)),
  
  numericInput("myNumericInput", label = h4("Numeric Input"),
               value = NA, min = 0, max = 50, step = 1),
  
  actionButton("submit", "Submit"),
  
  textOutput("myOutput")
)


server <- function(input, output, session){
  
  score <- reactive({
    scoreOut <- paste(input$myRadioButton, input$myNumericInput)
    })
  
  observeEvent(input$myRadioButton, {
    hide("myOutput")
    })
  
  observeEvent(input$myNumericInput, {
    hide("myOutput")
  })
  
  observeEvent(input$submit, {
    show("myOutput")
    output$myOutput <- renderText({
      paste("This is your value:", score())
    })
  })
  
}

shinyApp(ui, server)

所以在上面的例子中,输出显示在点​​击“提交”之后。我想要的是,如果您返回并更改说单选或数字输入,输出将消失,直到再次单击“提交”。

您错过了 UI 中的 useShinyjs() 以加载执行隐藏功能所需的 JavaScript:

library(shiny)
library(shinyjs)

ui <- fluidPage(

  # load required Java Script
  useShinyjs(),

  radioButtons("myRadioButton",
    label = h4("Radio Input"),
    choices = list(
      "A" = 0,
      "B" = 1,
      "C" = 2
    ),
    selected = character(0)
  ),
  numericInput("myNumericInput",
    label = h4("Numeric Input"),
    value = NA, min = 0, max = 50, step = 1
  ),
  actionButton("submit", "Submit"),
  textOutput("myOutput")
)


server <- function(input, output, session) {
  score <- reactive({
    scoreOut <- paste(input$myRadioButton, input$myNumericInput)
  })

  observeEvent(input$myRadioButton, {
    hide("myOutput")
  })

  observeEvent(input$myNumericInput, {
    hide("myOutput")
  })

  observeEvent(input$submit, {
    show("myOutput")
    output$myOutput <- renderText({
      paste("This is your value:", score())
    })
  })
}

shinyApp(ui, server)