IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React 使用正则在字符串标签中插入组件 -> 正文阅读

[JavaScript知识库]React 使用正则在字符串标签中插入组件

  1. 最近遇到一个需求,需要将后端返回的字符串标签中的span标签替换为组件,且渲染在页面上,字符串标签的格式如下
const str = `<p>分析发现xx街道辖区内上报商铺飞线充电事件<span class="dataItem">${"id":1,"name":"xx区X街道X事件X时间段X问题来源X数据来源的数量"}</span>起,
    占街道事件总数的<span class="dataItem">${"id":5,"name":"xx区X街道X事件X时间段X问题来源X数据来源的数量在相同条件下Y事件中的占比"}</span>,
    占街道消防安全类事件总数的<span class="dataItem">${"id":6,"name":"xx区X街道X事件X时间段X问题来源X数据来源的数量在相同条件下所有事件中的占比"}</span>,
    占全区商铺飞线充电事件总数的<span class="dataItem">${"id":7,"name":"xx区X街道X事件X时间段X问题来源X数据来源的数量在相同条件下xx区的占比"}</span>,
    与其它街道相比排名第<span class="dataItem">${"id":8,"name":"xx区X街道X事件X时间段X来源的数量在相同条件下xx区的排名"}</span>。</p >`
  • 需要将 class 为 “dataItem” 的 span 标签替换为下拉组件,且 span 标签中显示为 ${} 中的 name
  1. 解决方案
class Test extends React.Component {
  constructor(props) {
    super(props);
    
  }
    getContent = (info) => {
        let list = []

        let reg = /<span (.*?)>(.*?)<\/span>/g, match, lastIndex = 0, ret = [], i = 0, bindId = 0;
        while (match = reg.exec(info)) {

            if (match.index !== lastIndex) {
                ret.push(React.createElement("p", { className: styles.text, key: i++ }, info.slice(lastIndex, match.index)));
            }

            let data = JSON.parse(match[2].substr(1))
            data.bindId = bindId++
            list.push(data)

            ret.push(<Dropdown
                visible={showTemplateEdit && currentDataItem.bindId === data.bindId}
                destroyPopupOnHide
                key={i++}
                overlay={<div>Hello</div>}
                trigger={['click']}
            >
                <span className={styles.dataItem} data={{ ...data }}><i>{' {'}</i>{`${data.name}`}<i>{'} '}</i></span>
            </Dropdown>);
            lastIndex = match.index + match[0].length

        }
        if (info && lastIndex !== info.length) {
            ret.push(info.slice(lastIndex))
        }
        return ret;
    }
  render() {
    return <div>
      <h1>hello</h1>
      {this.getContent(str)}
    </div>
  }
}
ReactDOM.render(<Test />, document.querySelector("#root"))
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章           查看所有文章
加:2022-05-06 10:58:50  更:2022-05-06 11:01:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:45:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码