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

React Bootstrap Accordion组件defaultActiveKey动态渲染不生效问题排查

问题原因

  1. 类型不匹配:你初始化useState("2")传入的是字符串类型的"2",但动态渲染时给eventKey赋值的index + 1是数字类型,React Bootstrap的Accordion匹配defaultActiveKey时会做严格相等校验,类型不同会导致匹配失败,自然不会默认激活对应项。静态示例中你给eventKey传的是字符串"0",和状态值类型一致,所以可以正常匹配。
  2. 受控/非受控模式混用:defaultActiveKey是Accordion非受控模式下的属性,仅在组件首次渲染时生效一次,后续状态由组件内部自行维护。但你现在额外用useState维护了activeId来控制激活类,属于要自定义控制组件状态的受控场景,此时应该用受控属性activeKey而非defaultActiveKey,两者混用会导致内外状态不一致,出现失效问题。

解决方法

方案1:统一类型+使用非受控模式

如果不需要自定义控制Accordion的展开状态,只需要默认激活指定项,直接统一eventKey和defaultActiveKey的类型即可:

// 把初始值改为数字类型,和index+1的类型匹配
const [activeId, setActiveId] = useState(2);

或者把动态渲染的eventKey转为字符串:

eventKey={(index + 1).toString()}

方案2:切换为完全受控模式(推荐,适配你自定义激活类的需求)

直接把Accordion的defaultActiveKey替换为受控属性activeKey,让组件的展开状态完全和你的activeId绑定,避免内外状态冲突:

<Accordion activeKey={activeId}>
  {/* 其余渲染逻辑保持不变 */}
</Accordion>

这种方式可以完全由你控制激活逻辑,自定义的active类和Accordion的展开状态也会完全同步,不会再出现匹配失效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:18:04