国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

react如何渲染包含html標(biāo)簽元素的字符串

這篇具有很好參考價(jià)值的文章主要介紹了react如何渲染包含html標(biāo)簽元素的字符串。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

如何渲染包含html標(biāo)簽元素的字符串

最近有個(gè)搜索替換的需求,用戶(hù)可以輸入關(guān)鍵字信息來(lái)匹配出對(duì)應(yīng)的數(shù)據(jù),然后對(duì)其關(guān)鍵字進(jìn)行標(biāo)記顯示,如下圖所示:
react如何渲染包含html標(biāo)簽元素的字符串


實(shí)現(xiàn)上面的需求的思路就是前端去判斷檢索內(nèi)容,將內(nèi)容中對(duì)應(yīng)的關(guān)鍵字設(shè)置一個(gè)背景顏色的樣式,代碼如下:

    if (content?.includes(serachV)) {
      content = content.replaceAll(serachV, `<span style="background-color: gold;">${serachV}</span>`);
      return content
    }

但這樣設(shè)置后并未達(dá)到我想要的效果,前端展示上并沒(méi)有變黃,沒(méi)有生效。

后面查閱資料發(fā)現(xiàn),在react中,出于安全考慮的原因(XSS 攻擊),在 React.js 當(dāng)中所有的表達(dá)式插入的內(nèi)容都會(huì)被自動(dòng)轉(zhuǎn)義,就相當(dāng)于 jQuery 里面的 text(…) 函數(shù)一樣,任何的 HTML 格式都會(huì)被轉(zhuǎn)義掉。

所以通過(guò)富文本編輯器進(jìn)行操作后的內(nèi)容,會(huì)保留原有的標(biāo)簽樣式,并不能正確展示,如下圖紅框所示:

react如何渲染包含html標(biāo)簽元素的字符串


因此我們可以使用dangerouslySetInnerHTML這個(gè)api將其設(shè)置為內(nèi)部的HTML,以此達(dá)到上述的效果,代碼如下:

    if (content?.includes(serachV)) {
      content = content.replaceAll(serachV, `<span style="background-color: gold;">${serachV}</span>`);
      return <span dangerouslySetInnerHTML={{ __html: content }} />;
    }

完整代碼如下:

export const quickReplaceColumns = (serachV: string) => {
  const renderNode = (content: string) => {
    if (content?.includes(serachV)) {
      content = content.replaceAll(serachV, `<span style="background-color: gold;">${serachV}</span>`);
      return <span dangerouslySetInnerHTML={{ __html: content }} />;
    }
    return content || '--';
  };
  return [
    {
      title: '用例名稱(chēng)',
      dataIndex: 'name',
      width: '30%',
      render: (name: string) => renderNode(name),
    },
    {
      title: '用例內(nèi)容',
      dataIndex: 'content',
      width: '50%',
      render: (content: string) => renderNode(content),
    },
    {
      title: '所屬模塊',
      dataIndex: 'module_name',
      width: '10%',
    },
  ];
};

實(shí)現(xiàn)效果如下:


react如何渲染包含html標(biāo)簽元素的字符串


dangerouslySetInnerHTML是什么

dangerouslySetInnerHTMl 是React標(biāo)簽的一個(gè)屬性,dangerouslySetInnerHTML翻譯過(guò)來(lái)就是:危險(xiǎn)的設(shè)置內(nèi)部HTML。

為什么說(shuō)是危險(xiǎn)的呢?因?yàn)橛脩?hù)的輸入是不可控的,如果是這樣的操作是開(kāi)發(fā)給用戶(hù)輸入可能會(huì)導(dǎo)致 cross-site scripting (XSS) 攻擊或者其他網(wǎng)頁(yè)攻擊,還有一些意向不到的錯(cuò)誤出現(xiàn)。

但我們這里的使用情況是控制了輸入的,并沒(méi)有開(kāi)放給用戶(hù)輸入,所以不會(huì)出現(xiàn)上面的情況,可以放心使用。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-437269.html

使用注意事項(xiàng)

  1. dangerouslySetInnerHTML的語(yǔ)法:第一層{ }代表JSX語(yǔ)法,第二層{ }是一個(gè)__html:string的鍵值對(duì)。
  2. 最初未用反引號(hào)包裹<img className="detail_img" src=${v[0]} />結(jié)果渲染的全是[object Object],想了半天才反應(yīng)過(guò)來(lái)__html:string
  3. 用反引號(hào)包裹的html代碼不再是JSX語(yǔ)法,所以clasName要改為class;

到了這里,關(guān)于react如何渲染包含html標(biāo)簽元素的字符串的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用正則表達(dá)式 移除 HTML 標(biāo)簽后得到字符串

    使用正則表達(dá)式 移除 HTML 標(biāo)簽后得到字符串

    在上述代碼中,stripHTMLTags 函數(shù)使用正則表達(dá)式 /[^]+/g 來(lái)匹配所有的 HTML 標(biāo)簽,并使用空字符串進(jìn)行替換,從而將 HTML 標(biāo)簽移除。 最后,返回移除 HTML 標(biāo)簽后的字符串。

    2024年02月14日
    瀏覽(24)
  • 怎么將拼接的字符串element組件通過(guò)“v-html“渲染到頁(yè)面

    怎么將拼接的字符串element組件通過(guò)“v-html“渲染到頁(yè)面

    如上圖所示,沒(méi)那么多廢話(huà),直接上代碼 html中 vue中

    2024年02月16日
    瀏覽(32)
  • golang中如何判斷字符串是否包含另一字符串

    golang中如何判斷字符串是否包含另一字符串 在Go語(yǔ)言中,可以使用strings.Contains()函數(shù)來(lái)判斷一個(gè)字符串是否包含另一個(gè)字符串。該函數(shù)接受兩個(gè)參數(shù):要搜索的字符串和要查找的子字符串,如果子字符串存在于要搜索的字符串中,則返回true,否則返回false。 下面是一個(gè)示例代

    2024年02月09日
    瀏覽(91)
  • 如何在Vue模板中渲染HTML標(biāo)簽?

    當(dāng)你在Vue模板中需要渲染HTML標(biāo)簽時(shí),你可以使用Vue的內(nèi)置指令v-html。這個(gè)指令可以讓父組件將數(shù)據(jù)作為HTML解析并渲染到子組件中。聽(tīng)起來(lái)很高級(jí),但是我會(huì)用幽默的語(yǔ)言和簡(jiǎn)單的例子來(lái)解釋這個(gè)概念。 首先,讓我們來(lái)看一個(gè)簡(jiǎn)單的例子。假設(shè)你有一個(gè)包含HTML代碼的數(shù)據(jù)屬性

    2024年02月08日
    瀏覽(22)
  • Python如何判斷列表中是否包含字符串?

    Python如何判斷列表中是否包含字符串? 在Python編程中,我們經(jīng)常需要對(duì)列表進(jìn)行操作,其中一個(gè)常見(jiàn)的問(wèn)題是如何判斷列表中是否包含特定的字符串。本文將為您介紹幾種實(shí)現(xiàn)方法。 方法一:使用in操作符 Python中可以使用in操作符快速判斷一個(gè)列表是否包含某個(gè)字符串。示例

    2024年02月08日
    瀏覽(101)
  • Oracle-如何判斷字符串包含中文字符串(漢字),刪除中文內(nèi)容及保留中文內(nèi)容

    Oracle-如何判斷字符串包含中文字符串(漢字),刪除中文內(nèi)容及保留中文內(nèi)容

    今天遇見(jiàn)一個(gè)問(wèn)題需要將字段中包含中文字符串的篩選出來(lái) 在網(wǎng)上查找了一下有以下三種方式: length計(jì)算字符長(zhǎng)度,lengthb計(jì)算字節(jié)長(zhǎng)度 篩選出包含中文的字符串 ASCIISTR函數(shù),參數(shù)是一個(gè)字符串,如果這個(gè)字符在ASCII碼表中有,則轉(zhuǎn)成ASCII表中的字符。如果沒(méi)有,則轉(zhuǎn)成xxx

    2024年02月12日
    瀏覽(27)
  • Vue標(biāo)簽屬性如何動(dòng)態(tài)傳參并拼接字符串

    Vue標(biāo)簽屬性如何動(dòng)態(tài)傳參并拼接字符串

    背景 html標(biāo)簽input的屬性placeholder需要?jiǎng)討B(tài)傳參并拼接固定的字符串 存在問(wèn)題 我們需要根據(jù)傳入值的類(lèi)型,在placeholder屬性賦值\\\"請(qǐng)輸入長(zhǎng)度\\\",“請(qǐng)輸入寬度”,\\\"請(qǐng)輸入厚度\\\"等提示字符 解決方案 方法一 v-bind:屬性=\\\" ‘字符串’+自定義變量名\\\",需要注意一下屬性一定是\\\":屬性=

    2024年02月05日
    瀏覽(26)
  • Jquery 如何獲取子元素。如何找到所有 HTML select 標(biāo)簽的選中項(xiàng)。jQuery 里的 ID 選擇器和 class 選擇器有何不同

    可以使用 jQuery 的子選擇器(Child Selector)或 find() 方法來(lái)獲取子元素。 子選擇器(Child Selector): 使用父元素的選擇器和 \\\'\\\' 符號(hào)來(lái)選取該父元素的子元素。 例如:選取 id 為 \\\'parent\\\' 的元素內(nèi)所有 class 為 \\\'child\\\' 的直接子元素。 find() 方法: 使用 jQuery 的 find() 方法來(lái)選取指定父

    2024年02月08日
    瀏覽(26)
  • Lua判斷字符串包含另一個(gè)字符串

    1.?string.find(\\\"原字符串\\\",\\\"目標(biāo)字符串\\\")? 返回這個(gè)子串的起始索引和結(jié)束索引,否則就會(huì)返回 nil 2. string.match(\\\"原字符串\\\",\\\"目標(biāo)字符串\\\")

    2024年02月17日
    瀏覽(35)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包