首页 > 解决方案 > 如何从闪亮的 textInput 更新字符向量?

问题描述

每次单击按钮时,我都想将输入文本添加到 Shiny 应用程序中的向量中。这是我正在使用的示例:

library(shiny)
ui <- fluidPage(
     textInput(inputId = "inquiry", label = "enter text"),
     actionButton(inputId = "searchButton", label = "Run"),
     verbatimTextOutput("queryList", placeholder = FALSE)
)
server <- function(input, output, session) {
     queryList <- c()
     observeEvent(input$searchButton, {
          queryList[length(queryList)+1] <- input$inquiry
          output$queryList <- renderPrint({
               queryList
          })
     })
}
shinyApp(ui = ui, server = server)

因此,如果"item1"输入并单击按钮,则"item2"输入并再次单击按钮,queryList应该看起来像c("item1", "item2"),但它似乎只是替换"item1""item2"。我确定我错过了一些非常简单的东西......queryList[length(queryList)+1]看起来有点奇怪,但它可以在非反应性环境中工作。

标签: rshinyshiny-reactivity

解决方案


使 queryList 反应性为我修复了它:

library(shiny)

ui <- fluidPage(
  textInput(inputId = "inquiry", label = "enter text"),
  actionButton(inputId = "searchButton", label = "Run"),
  verbatimTextOutput("queryList", placeholder = FALSE)
)

server <- function(input, output, session) {
  queryList <- reactiveValues()
  queryList$values <- c()

  observeEvent(input$searchButton, {
    queryList$values[length(queryList$values) + 1] <- input$inquiry
  })

  output$queryList <- renderPrint({
    if (!is.null(queryList$values)) {
      queryList$values
    }
  })
}

shinyApp(ui = ui, server = server)

推荐阅读