【问题标题】:react use dangerouslySetInnerHTML to render json with html tags反应使用 dangerouslySetInnerHTML 来呈现带有 html 标签的 json
【发布时间】: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')
);

【问题讨论】:

    标签: javascript html json reactjs eslint


    【解决方案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 标签打开到此类特征 &lt;div&gt;open and ready for children&lt;/div&gt; 时发生这种情况。

      由于您使用的是 JSX 语法扩展,这里的解决方案是将整个句子写在一行中:

      <div dangerouslySetInnerHTML={{__html: item.text}}></div>
      

      或者只使用一个单独的 div 标签:

      <div dangerouslySetInnerHTML={{
             __html: item.text
           }}/>
      

      顺便说一句,你没有在 jsbin 上收到错误,因为它是一个 react 生产构建,这个构建并不是要告诉你什么可以写得更好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-28
        • 2019-08-05
        • 2021-01-08
        • 2021-12-22
        • 2022-09-16
        • 2014-11-16
        • 2020-05-08
        • 2019-09-24
        相关资源
        最近更新 更多