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

如何在PrimeReact Accordion中正确使用innerHTML渲染内容?

解决PrimeReact Accordion解析HTML内容的问题

我帮你看了下你的代码,问题出在dangerouslySetInnerHTML的放置位置上——你把它直接作为AccordionTab的属性了,但PrimeReact的AccordionTab组件是把子元素作为面板的内容区域来渲染的,所以得把HTML内容放在它的内部容器里,而不是组件属性中。

修改后的代码示例

createAccordions = () => {
  const allFAQs = this.state.allFAQs;
  let accordions = [];
  
  for (const faq of allFAQs) {
    // 把dangerouslySetInnerHTML放在AccordionTab的子元素里
    const accordion = (
      <AccordionTab header={faq.question}>
        <div dangerouslySetInnerHTML={{ __html: faq.answer }} />
      </AccordionTab>
    );
    accordions.push(accordion);
  }
  
  return accordions;
}

render() {
  return (
    <div className="component">
      <h1 style={{textAlign: 'center'}}>{this.state.pageTitle}</h1>
      <div className="p-grid">
        <div className="p-col-3"></div>
        <div className="p-col-6">
          <Accordion>
            {this.createAccordions()}
          </Accordion>
        </div>
        <div className="p-col-3"></div>
      </div>
    </div>
  )
}

关键说明

  • 核心是给AccordionTab添加一个子容器(比如<div>),然后把dangerouslySetInnerHTML应用在这个容器上,这样PrimeReact才会正确渲染解析后的HTML内容。
  • 如果你的faq.answer本身就是包含HTML标签的字符串(比如<p>这是FAQ的答案</p>),直接替换示例中的faq.answer即可,不需要手动写HTML字符串。
  • 别忘了dangerouslySetInnerHTML的命名由来——如果你的HTML内容来自用户输入或不可信来源,一定要先做XSS过滤,避免安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:58:11