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

news2024/9/23 13:40:55

如何渲染包含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 格式都会被转义掉。

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

在这里插入图片描述


因此我们可以使用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%',
    },
  ];
};

实现效果如下:


在这里插入图片描述


dangerouslySetInnerHTML是什么

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

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

但我们这里的使用情况是控制了输入的,并没有开放给用户输入,所以不会出现上面的情况,可以放心使用。

使用注意事项

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

又失眠了!

下班晚&#xff0c;洗漱之后&#xff0c;就这个点了&#xff0c;睡不着&#xff0c;爬上来和大家随意 BB 几句。 一个人成长的过程&#xff0c;也是自我认同感不断增强的过程&#xff0c;在这个过程中&#xff0c;一个稳定的精神内核不断夯实&#xff0c;你不会为谁的贬低而诚惶…

Linux性能监控与调优工具

Linux性能监控与调优工具 文章目录 Linux性能监控与调优工具1.使用top、 vmstat、 iostat、 sysctl等常用工具2.使用高级分析手段&#xff0c; 如OProfile、 gprof4.使用LTP进行压力测试5.使用Benchmark评估系统 除了保证程序的正确性以外&#xff0c; 在项目开发中往往还关心性…

体验讯飞星火认知大模型,据说中文能力超越ChatGPT

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

Nature | 生成式人工智能如何构建更好的抗体

疫情高峰期&#xff0c;研究人员竞相开发一些首批有效的COVID-19治疗方法&#xff1a;从已经康复的人的血液中分离出来的抗体分子。 现在&#xff0c;科学家已经证明&#xff0c;生成式人工智能&#xff08;AI&#xff09;可以通过一些繁琐的过程提供捷径&#xff0c;提出增强抗…

代码随想录算法训练营day29 | 491.递增子序列,46.全排列,47.全排列 II

代码随想录算法训练营day29 | 491.递增子序列&#xff0c;46.全排列&#xff0c;47.全排列 II 491.递增子序列解法一&#xff1a;回溯&#xff08;map进行数层去重&#xff09;解法二&#xff1a;回溯&#xff08;仅针对本题&#xff0c;不具有普适性&#xff09; 46.全排列解法…

有一说一,这是我看到的全网最新最全的SpringBoot后端接口规范了

一、前言 一个后端接口大致分为四个部分组成&#xff1a;接口地址&#xff08;url&#xff09;、接口请求方式&#xff08;get、post等&#xff09;、请求数据&#xff08;request&#xff09;、响应数据&#xff08;response&#xff09;。虽然说后端接口的编写并没有统一规范…

一个.Net功能强大、易于使用、跨平台开源可视化图表

可视化图表运用是非常广泛的&#xff0c;比如BI系统、报表统计等。但是针对桌面应用的应用&#xff0c;很多报表都是收费的&#xff0c;今天给大家推荐一个免费.Net可视化开源的项目&#xff01; 项目简介 基于C#开发的功能强大、易于使用、跨平台高质量的可视化图表库&#…

Shiro 入门概述

目录 是什么 为什么要用 Shiro Shiro 与 SpringSecurity 的对比 基本功能 原理 是什么 Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完 成&#xff1a;认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松 地保护…

Linux 中的文件锁定命令:flock、fcntl、lockfile、flockfile

在 Linux 系统中&#xff0c;文件锁定是一种对文件进行保护的方法&#xff0c;可以防止多个进程同时访问同一个文件&#xff0c;从而导致数据损坏或者冲突。文件锁定命令是一组用于在 Linux 系统中实现文件锁定操作的命令&#xff0c;它们可以用于对文件进行加锁或解锁&#xf…

直击中国国际金融展:实在智能携多项科技成果亮相,展现数字金融力量

4月25日-27日&#xff0c;中国国际金融展于北京首钢会展中心成功举办。作为我国规格最高、历史最久的金融科技展&#xff0c;本次展会以“荟萃金融科技成果&#xff0c;展现数字金融力量&#xff0c;谱写金融服务中国式现代化新篇章”为主题&#xff0c;吸引了众多国内金融机构…

企业邮箱选购,需关注哪些重要因素?

企业邮箱选择考虑哪些问题&#xff1f;应该从企业邮箱安全、企业邮箱的稳定性、企业邮箱专业、方便迁移到新的企业邮箱、企业邮箱邮件的到达率、功能强大的企业邮箱、企业邮箱手机客户端设置等方面考虑。 1.企业邮箱安全 企业邮箱应考虑病毒防治能力。Zoho Mail企业邮箱从物理安…

华硕笔记本系统更新后开机自动蓝屏怎么U盘重装系统?

华硕笔记本系统更新后开机自动蓝屏怎么U盘重装系统&#xff1f;有用户将自己的华硕笔记本进行系统升级之后&#xff0c;遇到了开机自动蓝屏的情况。遇到这个问题我们怎么去进行解决呢&#xff1f;接下来一起来看看怎么通过U盘重装系统的方法解决此问题吧。 准备工作&#xff1a…

【计算机组成原理】第五章 中央处理器

系列文章目录 第一章 计算系统概论 第二章 运算方法和运算器 第三章 多层次的存储器 第四章 指令系统 第五章 中央处理器 第六章 总线系统 第七章 外围设备 第八章 输入输出系统 文章目录 系列文章目录前言第五章 中央处理器5.1 CPU功能和组成5.1.1 CPU的功能5.1.2 CPU的基本…

中文修改润色平台-中文写作润色软件有哪些

中文语言润色软件 中文语言润色软件是一种基于自然语言处理技术&#xff0c;旨在提高中文文本的语言风格、表达能力和可读性的工具。中文语言润色软件可以自动检测和纠正文本中出现的语法、拼写、标点符号以及其他笔误等语言问题&#xff0c;并给出相应的纠正建议和修改意见。…

2022年5月、11月网络工程师真题详解

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 2022年5月网络工程师科目二真题 试题一&#xff1a; 某分支机构网络拓扑图如 1-1 所示&#xff0c;该网络通过 BGP 接收总部网络路由&#xff0c;设备 1 与设备…

AIGC产业研究报告 2023——音频生成篇

易观&#xff1a;今年以来&#xff0c;随着人工智能技术不断实现突破迭代&#xff0c;生成式AI的话题多次成为热门&#xff0c;而人工智能内容生成&#xff08;AIGC&#xff09;的产业发展、市场反应与相应监管要求也受到了广泛关注。为了更好地探寻其在各行业落地应用的可行性…

实战【7】手把手教你搭建属于自己的服务器

1 概述 最近总是想搭建自己的网站&#xff0c;奈何皮夹里空空如也&#xff0c;服务器也租不起&#xff0c;更别说域名了。于是我就寻思能否自己搭建个服务器&#xff0c;还不要钱呢&#xff1f; 经过几天的冲浪&#xff0c;我发现有两个免费的建站工具&#xff1a;Apache 和 …

MySQL 索引、事务与存储引擎

MySQL 索引 索引&#xff1a;根据查询字段在索引表中找到该行数据的物理地址。 作用&#xff1a;加快查询速度&#xff1b;排序。 缺点&#xff1a;占用额外的磁盘空间&#xff1b;更新一个包含索引的表需要花费更多的时间。 创建索引的原则 表的主键和外键需要索引&#…

Python每日一练(20230509) 石子游戏 IV\V\VI

目录 1. 石子游戏 Stone Game IV 2. 石子游戏 Stone Game V 3. 石子游戏 Stone Game VI &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 石子游戏 Stone Game IV Alice 和 Bob 两个人…

Halcon与Qt联合编程方法二(C++版本)

上一篇文章中提到基于python实现Halcon与Qt联合编程&#xff0c;但是在实际开发中&#xff0c;比如说已经有了qt编写的c版软件进行算法迭代&#xff0c;或者已经有了halcon编写的&#xff08;.hdev文件&#xff09;算法&#xff0c;想进行软件封装&#xff0c;这时候可以考虑把…