简体   繁体   English

如何从闪亮的textInput更新字符向量?

[英]How to update a character vector from shiny textInput?

I want to add the input text to a vector in a Shiny app every time a button is clicked. 我想在每次单击按钮时将输入文本添加到Shiny应用程序的矢量中。 This is the example I'm working with: 这是我正在使用的示例:

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)

So if "item1" is entered and the button is clicked, then "item2" is entered and the button is clicked again, queryList should look like c("item1", "item2") , but it seems to just be replacing "item1" with "item2" . 因此,如果输入"item1"并单击按钮,然后输入"item2"并再次单击按钮,则queryList应该看起来像c("item1", "item2") ,但它似乎只是在替换"item1""item2" I'm sure I'm missing something very simple... queryList[length(queryList)+1] looks a little strange, but it works in a non-reactive environment. 我确定我缺少一些非常简单的东西... queryList[length(queryList)+1]看起来有些奇怪,但它在非反应性环境中有效。

Making queryList reactive fixed it for me: 使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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM