【问题标题】:className not working on dangerouslySetInnerHTMLclassName 在危险的SetInnerHTML 上不起作用
【发布时间】:2021-12-21 20:21:31
【问题描述】:

我有 initial string 像这样:-

My first name is @John# and last name is %Smith#.

我将在哪里替换:-

  • @<span className="contentDescHighlighted">
  • %<span className="contentDescHighlighted content_bold">
  • #</span>

工作代码如下:-

  const handleAddingHighlight = (data) => {
    let changeAT = data.replaceAll(`@`, `<span className="contentDescHighlighted">`)
    let changePercentage = changeAT.replaceAll(`%`, `<span className="contentDescHighlighted content_bold">`)
    let highlightedData = changePercentage.replaceAll(`#`, `</span>`); console.log(highlightedData)

    return highlightedData
  }

更改string 后,我将使用dangerouslySetInnerHTML 注入它们,如下所示:-

  <p 
    className="contentDesc" 
    dangerouslySetInnerHTML={{__html: handleAddingHighlight(`My first name is @John# and last name is %Smith#.`)}}
  ></p>

不幸的是,应用的styling/className根本没有任何效果,如下所示:-

  // what it should looks like
  <p className="contentDesc">
    My first name is <span className="contentDescHighlighted">John</span> and last name is <span className="contentDescHighlighted content_bold">Smith</span>.
  </p>
  // current outcome when using dangerouslySetInnerHTML
  <p 
    className="contentDesc" 
    dangerouslySetInnerHTML={{__html: handleAddingHighlight(`My first name is @John# and last name is %Smith#.`)}}
  ></p>

完整的组件如下所示
export default function Test() {
  const handleAddingHighlight = (data) => {
    let changeAT = data.replaceAll(`@`, `<span className="contentDescHighlighted">`)
    let changePercentage = changeAT.replaceAll(`%`, `<span className="contentDescHighlighted content_bold">`)
    let highlightedData = changePercentage.replaceAll(`#`, `</span>`); console.log(highlightedData)

    return highlightedData
  }

  return (
    <>
      {/* what it should looks like */}
      <p className="contentDesc">
        My first name is <span className="contentDescHighlighted">John</span> and last name is <span className="contentDescHighlighted content_bold">Smith</span>.
      </p>
      {/* current outcome when using dangerouslySetInnerHTML */}
      <p 
        className="contentDesc" 
        dangerouslySetInnerHTML={{__html: handleAddingHighlight(`My first name is @John# and last name is %Smith#.`)}}
      ></p>
    </>
  )
}

【问题讨论】:

    标签: reactjs classname dangerouslysetinnerhtml


    【解决方案1】:

    这就是问题所在。使用 dangerouslySetInnerHTML 属性呈现的内容必须是 HTML 元素。他们根本不是JSX。 应该是

    class
    

    (HTML属性)

    而不是

    className
    

    (这是 JSX 属性)

    【讨论】:

    • @lala,看看这个!!
    • 谢谢你!否则我不会知道这个事实。
    猜你喜欢
    • 2015-12-25
    • 2019-04-26
    • 1970-01-01
    • 2018-04-30
    • 2021-07-24
    • 2021-06-24
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多