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

Shiny中server-side selectizeInput无法正常工作求助

解决Server-Side SelectizeInput的无限循环问题

问题根源

你把updateSelectizeInput放在了监听input$selected_ids的observeEvent中,每次选中值变化就触发更新操作,而更新又会再次修改input$selected_ids,最终形成无限循环。同时,初始化阶段没有正确配置服务端模式的加载逻辑。

正确实现代码

UI模块

保留selectizeInput的choices=NULL,无需传入响应式对象r(UI模块仅负责渲染元素):

test_side_ui <- function(id){
  ns <- NS(id)
  tagList(
    selectizeInput(
      inputId = ns("selected_ids"), 
      label = "My IDs:", 
      choices = NULL, 
      multiple = TRUE,
      options = list(maxOptions = 10000L)
    )
  )
}

Server模块

  1. 初始化时一次性加载服务端选项,开启服务端模式
  2. 单独监听选中值变化,同步到响应式对象r,避免和更新操作互相触发
test_side_server <- function(id, r){
  moduleServer(id, function(input, output, session){
    ns <- session$ns
    
    # 初始化加载服务端选项,仅执行一次
    updateSelectizeInput(
      session = session,
      inputId = "selected_ids",
      choices = paste0('id', 1:60000),
      selected = r$selected_ids,
      server = TRUE  # 关键:开启服务端模式
    )
    
    # 同步选中值到响应式对象
    observeEvent(input$selected_ids, {
      r$selected_ids <- input$selected_ids
    }, ignoreNULL = FALSE)
  })
}

补充说明

  • 服务端模式下,updateSelectizeInput只需初始化调用一次,Selectize会自动在用户输入搜索词时从服务器获取匹配选项,无需手动重复更新
  • 若后续需要动态更新选项(比如数据源变化),应监听数据源的变化事件,而非选中值的变化事件来调用updateSelectizeInput

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:35:13