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模块
- 初始化时一次性加载服务端选项,开启服务端模式
- 单独监听选中值变化,同步到响应式对象
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
相关产品推荐
相关产品推荐

