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

React Accordion组件指定位置加分隔符的索引异常问题解决

在Accordion列表指定位置添加分隔符的正确方案

你的问题出在拆分数组后第二个map生成的index重置为0,导致传递给AccordionItem的索引和原数组真实索引不匹配,和上下文维护的activeItemIndex冲突,出现错误激活的情况。

直接在单个map循环内判断位置渲染分隔符即可解决,不需要拆分数组:

方案一:根据item的label判断(更灵活,不受数组顺序影响)

<Accordion>
  {items.map((item, index) => (
    <React.Fragment key={item.id}>
      <AccordionItem key={item.id} item={item} index={index} />
      {/* 在label为"Two"的项后插入分隔符 */}
      {item.label === "Two" && <hr />}
    </React.Fragment>
  ))}
</Accordion>

方案二:根据数组索引判断(依赖数组顺序)

如果确定"Two"始终是第二个元素(索引为1),可以用索引判断:

<Accordion>
  {items.map((item, index) => (
    <React.Fragment key={item.id}>
      <AccordionItem key={item.id} item={item} index={index} />
      {/* 在第二个元素后插入分隔符 */}
      {index === 1 && <hr />}
    </React.Fragment>
  ))}
</Accordion>

方案优势

  • 保持AccordionItem的index与原数组真实索引一致,完全匹配上下文的activeItemIndex,不会出现索引混乱问题。
  • 使用React.Fragment包裹,不会额外生成多余DOM节点,避免破坏Accordion组件的结构逻辑。
  • 代码简洁直接,无需拆分数组,维护性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:33:35