React TSX组件Props中HTML标签不生效的问题求解
解决TSX中HTML标签无法生效的问题
你遇到的问题是因为React默认会对字符串内容做转义处理,<strong>这类HTML标签会被当成普通文本渲染,不会解析成对应的页面元素。以下是不同场景的解决方法:
场景1:自定义组件(自己开发的myComponent)
如果myComponent是你自己写的,修改组件内部的渲染逻辑,用dangerouslySetInnerHTML解析HTML字符串:
// 组件定义 interface MyComponentProps { contents: string; } function MyComponent({ contents }: MyComponentProps) { return <div dangerouslySetInnerHTML={{ __html: contents }} />; }
场景2:第三方组件
如果myComponent是第三方库提供的,先查组件文档看是否有支持HTML渲染的专属属性(比如htmlContent)。如果没有,就用容器元素包裹,通过dangerouslySetInnerHTML渲染内容:
<MyComponent> <div dangerouslySetInnerHTML={{ __html: `<strong>example</strong>` }} /> </MyComponent>
更安全的推荐方案
尽量避免直接传递HTML字符串,改用React元素传递,既符合React设计思路,又能避免安全风险:
// 使用组件时直接传React元素 <MyComponent contents={<strong>example</strong>} /> // 组件定义时接收ReactNode类型 interface MyComponentProps { contents: React.ReactNode; } function MyComponent({ contents }: MyComponentProps) { return <div>{contents}</div>; }
重要提醒
dangerouslySetInnerHTML带有"dangerously"前缀是有原因的:如果HTML字符串包含未过滤的用户输入,可能引发XSS攻击。务必确保contents的内容是可信的,不要直接使用用户提交的原始内容。
内容的提问来源于stack exchange,提问作者Amir Torkashvand
相关产品推荐
相关产品推荐

