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

NextUI中dangerouslySetInnerHTML失效,Textarea无法渲染HTML内容

解决NextUI Textarea无法渲染HTML内容的问题

问题根源

Textarea(包括NextUI封装的版本)本质是为纯文本输入/展示设计的,它不支持渲染HTML内容。你用dangerouslySetInnerHTML完全无效,因为组件内部只会把value的内容当纯文本处理,不会解析HTML。另外你的text1是转义后的字符串(&lt;a&gt;),就算能渲染,也得先转成真实的<a>标签才行。

解决方案

如果要展示带高亮或HTML格式的内容,别用Textarea,换成富文本容器,比如用div配合dangerouslySetInnerHTML,同时模拟Textarea的样式。以下是修改后的代码:

首先安装HTML解码库(处理转义后的字符串):

npm install he

修改后的组件代码:

import he from 'he';
import { Button } from '@nextui-org/react';

export default function Home() {
  // 转义后的HTML字符串,先解码为真实HTML标签
  const text1 = '&lt;a&gt;foo&lt;/a&gt;';
  const decodedHtml = he.decode(text1);

  return (
    <div className="flex flex-col w-full mb-6 md:mb-0 gap-4">
      <div className="flex w-full flex-wrap md:flex-nowrap mb-6 md:mb-0 gap-4">
        {/* 用div模拟只读Textarea的样式,支持HTML渲染 */}
        <div className="resize-y min-h-[200px] p-3 border border-gray-300 rounded-lg bg-gray-50 font-sans text-sm">
          <label className="block mb-1 text-sm font-medium text-gray-700">ID 1</label>
          <div dangerouslySetInnerHTML={{ __html: decodedHtml }} />
        </div>
      </div>
      <div className="flex justify-center gap-6 w-full mt-4">
        <Button color="success" variant="ghost" size="md">Yes</Button>
        <Button color="danger" variant="ghost" size="md">No</Button>
      </div>
    </div>
  );
}

如果你的原始字符串已经是未转义的HTML(比如直接是<a>foo</a>),可以跳过解码步骤,直接把字符串传给dangerouslySetInnerHTML。

补充提示

如果需要可编辑的富文本功能,建议使用专门的富文本编辑器组件(如Slate、Draft.js),NextUI的Textarea仅适用于纯文本场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:12