You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny中获取动态生成的textin输入框的有序值?

解决Shiny动态TextInput组件的取值问题

你当前的问题在于获取输入值时包含了add_btn/rm_btn的点击计数,且结果顺序混乱。要只获取按输入框顺序排列的textin系列输入值,可通过以下方式修改代码:

核心解决方案

利用输入框的计数变量counter$n,按编号顺序提取目标输入值,或从全量输入中筛选并排序textin相关项,确保结果仅包含所需内容且顺序正确。

修改后完整代码

library(shiny)

ui <- shinyUI(fluidPage(
  
  sidebarPanel(
    actionButton("add_btn", "Add Textbox"),
    actionButton("rm_btn", "Remove Textbox"),
    textOutput("counter"),
    verbatimTextOutput("my_inputs")
  ),
  
  mainPanel(uiOutput("textbox_ui"))
  
))

server <- shinyServer(function(input, output, session) {
  
  # 跟踪输入框数量
  counter <- reactiveValues(n = 0)
  
  observeEvent(input$add_btn, {counter$n <- counter$n + 1})
  observeEvent(input$rm_btn, {
    if (counter$n > 0) counter$n <- counter$n - 1
  })
  
  output$counter <- renderPrint(print(counter$n))
  
  # 生成动态TextInput(移除冗余的value绑定,Shiny自动保留输入状态)
  textboxes <- reactive({
    n <- counter$n
    if (n > 0) {
      lapply(seq_len(n), function(i) {
        textInput(inputId = paste0("textin", i),
                  label = paste0("Textbox", i))
      })
    }
  })
  
  output$textbox_ui <- renderUI({ textboxes() })

  # 按顺序提取textin输入值
  targetInputs <- reactive({
    req(counter$n > 0)
    sapply(seq_len(counter$n), function(i) {
      # 处理未输入的情况,返回空字符串避免NULL值
      input[[paste0("textin", i)]] %||% ""
    })
  })
  
  output$my_inputs <- renderPrint({
    targetInputs()
  })
  
})

shinyApp(ui, server)

备选筛选方案(从全量输入中提取)

若需要从所有输入中筛选目标项,可替换targetInputs部分为以下代码:

targetInputs <- reactive({
  all_inputs <- reactiveValuesToList(input)
  # 筛选以textin开头的输入ID
  textin_ids <- grep("^textin\\d+$", names(all_inputs), value = TRUE)
  # 按编号排序ID
  sorted_ids <- textin_ids[order(as.integer(sub("textin", "", textin_ids)))]
  # 提取对应值
  unlist(all_inputs[sorted_ids])
})

关键说明

  • 原代码中通过AllInputs()绑定textInput的value是冗余操作,Shiny会自动保留动态生成控件的输入状态,无需手动设置。
  • 两种方案都能确保输出结果仅包含按顺序排列的textin输入值,不会混入按钮计数等无关内容。

内容的提问来源于stack exchange,提问作者Taufiq Rochman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:24:17