反应使用 dangerouslySetInnerHTML 来呈现带有 html 标签的 json
Posted
技术标签:
【中文标题】反应使用 dangerouslySetInnerHTML 来呈现带有 html 标签的 json【英文标题】:react use dangerouslySetInnerHTML to render json with html tags 【发布时间】:2017-10-03 09:19:36 【问题描述】:我正在尝试在列表中的字符串中呈现带有 html 标记的 json 列表,如下所示jsbin。它在 Jsbin 中工作。但在我的控制台中,我收到以下警告:
warning Only set one of `children` or `props.dangerouslySetInnerHTML` react/no-danger-with-children
只是想知道是否有其他方法可以使用 dangerouslySetInnerHTML 呈现列表以避免警告?
const displayList = [
item: 1,
text: "<strong>ABC</strong> this should be strong."
,
item: 2,
text: "<a>ABC</a> this should be link."
,
item: 3,
text: "normal text"
];
const App = () => (
<ul>
displayList.map((item, i) => (
<li key=i>
<div dangerouslySetInnerHTML=
__html: item.text
>
</div>
</li>
))
</ul>
);
ReactDOM.render(
<App />,
document.getElementById('root')
);
【问题讨论】:
【参考方案1】:如果使用 ESLint,则在 dangerouslySetInnerHTML 顶部和 div 元素内添加内联注释
<div
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML= __html: html
/>
【讨论】:
【参考方案2】:删除组件中 div
元素的封闭标记,使其看起来像以下代码:
<li key=i>
<div dangerouslySetInnerHTML=
__html: item.text
/>
</li>
根据this,它应该删除警告。
【讨论】:
这个..我一直在到处找这个..谢谢【参考方案3】:React 抱怨 dangerouslySetInnerHTML
与安全反应子级一起使用,当您让 div 标签打开到此类特征 <div>open and ready for children</div>
时发生这种情况。
由于您使用的是 JSX 语法扩展,这里的解决方案是将整个句子写在一行中:
<div dangerouslySetInnerHTML=__html: item.text></div>
或者只使用一个单独的 div 标签:
<div dangerouslySetInnerHTML=
__html: item.text
/>
顺便说一句,你没有在 jsbin 上收到错误,因为它是一个 react 生产构建,这个构建并不是要告诉你什么可以写得更好。
【讨论】:
以上是关于反应使用 dangerouslySetInnerHTML 来呈现带有 html 标签的 json的主要内容,如果未能解决你的问题,请参考以下文章