uiOutput 根据输入渲染,点击按钮时重置,输入更新后无法再次更新

uiOutput rendered based on input, resets when button is clicked, and then can't be updated again when the input is updated

我有一个闪亮的应用程序,其中混合了输入和总结用户输入内容的 uiOutputs。我有一个按钮可以重置所有输入值并清除 uiOutputs,但是一旦 uiOutputs 被清除,它们就不再根据输入进行更新。

这不会重置 uiOutput:

library(shiny)

ui <- fluidPage(
  selectInput('select1', label = 'test', choices = c('a', 'b', 'c'), selected = character(0)),
  
  uiOutput('output1'),
  
  actionButton('reset', 'reset')
)

server <- function(input, output, session) {
  output$output1 <- renderUI(
      if(length(input$select1) > 0) { ## this essentially determines whether the input is valid
        h6(input$select1)
      } else {
        h6('')
      }
    )
  
  observeEvent(input$reset, {
    updateSelectInput(session, 'select1', selected = character(0))
    print('clicked')
  })
}

shinyApp(ui = ui, server = server)

这个重置它但不允许它根据输入再次更新:

library(shiny)

ui <- fluidPage(
  selectInput('select1', label = 'test', choices = c('a', 'b', 'c'), selected = character(0)),
  
  uiOutput('output1'),
  
  actionButton('reset', 'reset')
)

server <- function(input, output, session) {
  output$output1 <- renderUI(h6(input$select1))
  observeEvent(input$reset, {
    output$output1 <- renderUI(
        h6('')
    )
    updateSelectInput(session, 'select1', selected = character(0))
    print('clicked')
  })
}

shinyApp(ui = ui, server = server)

如何使用 renderUI() 语句重置 uiOutput,然后在选择新输入时再次更新?

谢谢!

如您所述,清除 selectInput 中的选择不会触发 output(取决于该输入)更新。一种选择是创建一个 reactiveVal 来存储您的文本,您可以在重置时直接清除它。这对你有用吗?

server <- function(input, output, session) {
  
  rv <- reactiveVal('')
  
  output$output1 <- renderUI(
    h6(rv())
  )
  
  observe({
    if(length(input$select1) > 0) {
      rv(input$select1)
    } else {
      rv('')
    }
  })
  
  observeEvent(input$reset, {
    updateSelectInput(session, 'select1', selected = character(0))
    rv('')
  })
  
}