我试图在列表中的字符串中使用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')
);
答案 0 :(得分:2)
React抱怨dangerouslySetInnerHTML
与安全反应儿童一起使用,当你让div标签打开到这种特征<div>open and ready for children</div>
时就会发生这种情况。
由于您使用的是JSX语法扩展,因此这里的解决方案是将整个句子写成一行:
<div dangerouslySetInnerHTML={{__html: item.text}}></div>
或仅使用单件div标签:
<div dangerouslySetInnerHTML={{
__html: item.text
}}/>
顺便说一下,你没有在jsbin上得到错误,因为它是一个反应生成版本,这个版本并不是要告诉你什么可以写得更好。
答案 1 :(得分:1)
删除组件中div
元素的封闭标记,使其看起来如下所示:
<li key={i}>
<div dangerouslySetInnerHTML={{
__html: item.text
}} />
</li>
根据this,它应该删除警告。
答案 2 :(得分:0)
如果使用ESLint,则在危险地设置InnerHTML顶部和div元素内添加内联注释
<div
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: html }}
/>