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

嵌套bslib手风琴multiple=FALSE参数失效问题求助

解决bslib嵌套手风琴内层multiple=FALSE不生效的问题

当用bslib::accordion()和bslib::accordion_panel()构建嵌套手风琴时,外层手风琴设置multiple=FALSE能正常限制仅打开一个面板,但内层手风琴添加同样参数后,仍可同时打开多个子面板。

问题原因

bslib的手风琴组件依赖唯一id管理面板的展开/折叠状态,嵌套场景下如果内层手风琴未指定独立id,会引发状态管理冲突,导致multiple=FALSE参数失效。

修正后的代码

给每个内层手风琴添加唯一id参数即可解决问题:

library(shiny)
library(bslib)

accordion(
  accordion_panel(
    title = "panel_1",
    accordion(
      id = "sub_accordion_1", # 添加唯一标识id
      accordion_panel(title = "panel_1_sub_1", HTML("panel 1, subpanel 1 content")),
      accordion_panel(title = "panel_1_sub_2", HTML("panel 1, subpanel 2 content")),
      open=FALSE,
      multiple=FALSE # 现在可正常生效
    )
  ),
  accordion_panel(
    title = "panel_2",
    accordion(
      id = "sub_accordion_2", # 添加唯一标识id
      accordion_panel(title = "panel_2_sub_1", HTML("panel 2, subpanel 1 content")),
      accordion_panel(title = "panel_2_sub_2", HTML("panel 2, subpanel 2 content")),
      open=FALSE, 
      multiple=FALSE # 现在可正常生效
    )
  ),
  accordion_panel(
    title = "panel_3",
    accordion(
      id = "sub_accordion_3", # 添加唯一标识id
      accordion_panel(title = "panel_3_sub_1", HTML("panel 3, subpanel 1 content")),
      accordion_panel(title = "panel_3_sub_2", HTML("panel 3, subpanel 2 content")),
      open=FALSE, 
      multiple=FALSE # 现在可正常生效
    )
  ),
  open=FALSE, 
  multiple=FALSE # 正常工作
)

说明

为每个内层手风琴分配独立id后,组件能正确追踪各自的面板状态,multiple=FALSE的限制即可正常起效,确保每个内层手风琴同一时间仅能打开一个子面板。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:55:10