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

Flowbite-react Accordion组件添加状态条件后失效问题

问题原因

Flowbite-react的Accordion组件内部会通过React.cloneElement处理所有直接子元素,但当你的条件access === 2不成立时,对应的条件渲染表达式会返回null,而React.cloneElement不接受null作为参数,因此抛出错误。另外你用Fragment包裹单个Panel属于多余操作,不会解决问题反而在条件不满足时留下无效的null节点。

解决方案

方案1:过滤无效子元素

用数组包裹所有Accordion.Panel,过滤掉null等无效值,确保Accordion的子元素全为有效组件:

const [access, setAccess] = useState(null);
setAccess(2);

<Accordion arrowIcon="">
  {[
    <Accordion.Panel key="panel1">
      <Accordion.Title>dummy title 1</Accordion.Title>
      <Accordion.Content>dummy text 1.....</Accordion.Content>
    </Accordion.Panel>,
    access === 2 && (
      <Accordion.Panel key="panel2">
        <Accordion.Title>dummy title 2</Accordion.Title>
        <Accordion.Content>dummy text 2.....</Accordion.Content>
      </Accordion.Panel>
    )
  ].filter(Boolean)}
</Accordion>

方案2:简化条件渲染逻辑

直接移除多余的Fragment,仅在条件满足时渲染第二个Panel:

const [access, setAccess] = useState(null);
setAccess(2);

<Accordion arrowIcon="">
  <Accordion.Panel>
    <Accordion.Title>dummy title 1</Accordion.Title>
    <Accordion.Content>dummy text 1.....</Accordion.Content>
  </Accordion.Panel>

  {access === 2 && (
    <Accordion.Panel>
      <Accordion.Title>dummy title 2</Accordion.Title>
      <Accordion.Content>dummy text 2.....</Accordion.Content>
    </Accordion.Panel>
  )}
</Accordion>

注:如果方案2仍出现报错,说明Flowbite的Accordion组件未兼容子元素为null的场景,此时方案1的过滤方式更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:40:33