react如何渲染包含html标签元素的字符串

这篇具有很好参考价值的文章主要介绍了react如何渲染包含html标签元素的字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何渲染包含html标签元素的字符串

最近有个搜索替换的需求,用户可以输入关键字信息来匹配出对应的数据,然后对其关键字进行标记显示,如下图所示:
react如何渲染包含html标签元素的字符串


实现上面的需求的思路就是前端去判断检索内容,将内容中对应的关键字设置一个背景颜色的样式,代码如下:

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

但这样设置后并未达到我想要的效果,前端展示上并没有变黄,没有生效。

后面查阅资料发现,在react中,出于安全考虑的原因(XSS 攻击),在 React.js 当中所有的表达式插入的内容都会被自动转义,就相当于 jQuery 里面的 text(…) 函数一样,任何的 HTML 格式都会被转义掉。

所以通过富文本编辑器进行操作后的内容,会保留原有的标签样式,并不能正确展示,如下图红框所示:

react如何渲染包含html标签元素的字符串


因此我们可以使用dangerouslySetInnerHTML这个api将其设置为内部的HTML,以此达到上述的效果,代码如下:

    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: '用例名称',
      dataIndex: 'name',
      width: '30%',
      render: (name: string) => renderNode(name),
    },
    {
      title: '用例内容',
      dataIndex: 'content',
      width: '50%',
      render: (content: string) => renderNode(content),
    },
    {
      title: '所属模块',
      dataIndex: 'module_name',
      width: '10%',
    },
  ];
};

实现效果如下:


react如何渲染包含html标签元素的字符串


dangerouslySetInnerHTML是什么

dangerouslySetInnerHTMl 是React标签的一个属性,dangerouslySetInnerHTML翻译过来就是:危险的设置内部HTML。

为什么说是危险的呢?因为用户的输入是不可控的,如果是这样的操作是开发给用户输入可能会导致 cross-site scripting (XSS) 攻击或者其他网页攻击,还有一些意向不到的错误出现。

但我们这里的使用情况是控制了输入的,并没有开放给用户输入,所以不会出现上面的情况,可以放心使用。文章来源地址https://www.toymoban.com/news/detail-437269.html

使用注意事项

  1. dangerouslySetInnerHTML的语法:第一层{ }代表JSX语法,第二层{ }是一个__html:string的键值对。
  2. 最初未用反引号包裹<img className="detail_img" src=${v[0]} />结果渲染的全是[object Object],想了半天才反应过来__html:string
  3. 用反引号包裹的html代码不再是JSX语法,所以clasName要改为class;

到了这里,关于react如何渲染包含html标签元素的字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用正则表达式 移除 HTML 标签后得到字符串

    在上述代码中,stripHTMLTags 函数使用正则表达式 /[^]+/g 来匹配所有的 HTML 标签,并使用空字符串进行替换,从而将 HTML 标签移除。 最后,返回移除 HTML 标签后的字符串。

    2024年02月14日
    浏览(41)
  • 怎么将拼接的字符串element组件通过“v-html“渲染到页面

    如上图所示,没那么多废话,直接上代码 html中 vue中

    2024年02月16日
    浏览(33)
  • golang中如何判断字符串是否包含另一字符串

    golang中如何判断字符串是否包含另一字符串 在Go语言中,可以使用strings.Contains()函数来判断一个字符串是否包含另一个字符串。该函数接受两个参数:要搜索的字符串和要查找的子字符串,如果子字符串存在于要搜索的字符串中,则返回true,否则返回false。 下面是一个示例代

    2024年02月09日
    浏览(47)
  • 如何在Vue模板中渲染HTML标签?

    当你在Vue模板中需要渲染HTML标签时,你可以使用Vue的内置指令v-html。这个指令可以让父组件将数据作为HTML解析并渲染到子组件中。听起来很高级,但是我会用幽默的语言和简单的例子来解释这个概念。 首先,让我们来看一个简单的例子。假设你有一个包含HTML代码的数据属性

    2024年02月08日
    浏览(21)
  • Python如何判断列表中是否包含字符串?

    Python如何判断列表中是否包含字符串? 在Python编程中,我们经常需要对列表进行操作,其中一个常见的问题是如何判断列表中是否包含特定的字符串。本文将为您介绍几种实现方法。 方法一:使用in操作符 Python中可以使用in操作符快速判断一个列表是否包含某个字符串。示例

    2024年02月08日
    浏览(50)
  • Oracle-如何判断字符串包含中文字符串(汉字),删除中文内容及保留中文内容

    今天遇见一个问题需要将字段中包含中文字符串的筛选出来 在网上查找了一下有以下三种方式: length计算字符长度,lengthb计算字节长度 筛选出包含中文的字符串 ASCIISTR函数,参数是一个字符串,如果这个字符在ASCII码表中有,则转成ASCII表中的字符。如果没有,则转成xxx

    2024年02月12日
    浏览(43)
  • Vue标签属性如何动态传参并拼接字符串

    背景 html标签input的属性placeholder需要动态传参并拼接固定的字符串 存在问题 我们需要根据传入值的类型,在placeholder属性赋值\\\"请输入长度\\\",“请输入宽度”,\\\"请输入厚度\\\"等提示字符 解决方案 方法一 v-bind:属性=\\\" ‘字符串’+自定义变量名\\\",需要注意一下属性一定是\\\":属性=

    2024年02月05日
    浏览(44)
  • Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同

    可以使用 jQuery 的子选择器(Child Selector)或 find() 方法来获取子元素。 子选择器(Child Selector): 使用父元素的选择器和 \\\'\\\' 符号来选取该父元素的子元素。 例如:选取 id 为 \\\'parent\\\' 的元素内所有 class 为 \\\'child\\\' 的直接子元素。 find() 方法: 使用 jQuery 的 find() 方法来选取指定父

    2024年02月08日
    浏览(30)
  • Lua判断字符串包含另一个字符串

    1. string.find(\\\"原字符串\\\",\\\"目标字符串\\\")  返回这个子串的起始索引和结束索引,否则就会返回 nil 2. string.match(\\\"原字符串\\\",\\\"目标字符串\\\")

    2024年02月17日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包