前提:后端返回的的表情是解析成字符串的这种,形如:[微笑]、[旺财]等的

大致思路:

  • 需要一张完整表情包的精灵图,
  • 用正则去匹配[***]这种文本
  • 再写个json对照表,匹配到的再用json去匹配对应的style样式。
  • 利用background-position读取每个表情包对应在精灵图上的位置。
  • 业务代码中调用

  • import React, { useEffect, useState } from 'react';
    import { encodeEmoji } from './emoji.js';export default function MsgText(props) {const { data = '' } = props;const [chatMsgInfo, setChatMsgInfo] = useState('')useEffect(() => {setChatMsgInfo(data)}, [data])return (<div className='msg-text'>{encodeEmoji(chatMsgInfo?.chatMsg?.content)}</div>)
    }
    
  • js部分
  • const emojiJson = {'[微笑]': 'smiley_0','[撇嘴]': 'smiley_1','[色]': 'smiley_2','[发呆]': 'smiley_3','[得意]': 'smiley_4','[流泪]': 'smiley_5','[害羞]': 'smiley_6','[闭嘴]': 'smiley_7','[睡]': 'smiley_8','[大哭]': 'smiley_9','[尴尬]': 'smiley_10','[发怒]': 'smiley_11','[调皮]': 'smiley_12','[呲牙]': 'smiley_13','[惊讶]': 'smiley_14','[难过]': 'smiley_15','[冷汗]': 'smiley_17','[抓狂]': 'smiley_18','[吐]': 'smiley_19','[偷笑]': 'smiley_20','[愉快]': 'smiley_21','[白眼]': 'smiley_22','[傲慢]': 'smiley_23','[困]': 'smiley_25','[惊恐]': 'smiley_26','[流汗]': 'smiley_27','[憨笑]': 'smiley_28','[悠闲]': 'smiley_29','[奋斗]': 'smiley_30','[咒骂]': 'smiley_31','[疑问]': 'smiley_32','[嘘]': 'smiley_33','[晕]': 'smiley_34','[衰]': 'smiley_36','[骷髅]': 'smiley_37','[敲打]': 'smiley_38','[再见]': 'smiley_39','[擦汗]': 'smiley_40','[抠鼻]': 'smiley_41','[鼓掌]': 'smiley_42','[坏笑]': 'smiley_44','[左哼哼]': 'smiley_45','[右哼哼]': 'smiley_46','[哈欠]': 'smiley_47','[鄙视]': 'smiley_48','[委屈]': 'smiley_49','[快哭了]': 'smiley_50','[阴险]': 'smiley_51','[亲亲]': 'smiley_52','[可怜]': 'smiley_54','[菜刀]': 'smiley_55','[西瓜]': 'smiley_56','[啤酒]': 'smiley_57','[咖啡]': 'smiley_60','[饭]': 'smiley_61','[猪头]': 'smiley_62','[玫瑰]': 'smiley_63','[凋谢]': 'smiley_64','[嘴唇]': 'smiley_65','[爱心]': 'smiley_66','[心碎]': 'smiley_67','[炸弹]': 'smiley_70','[便便]': 'smiley_74','[月亮]': 'smiley_75','[太阳]': 'smiley_76','[礼物]': 'u1F381','[拥抱]': 'smiley_78','[强]': 'smiley_79','[弱]': 'smiley_80','[握手]': 'smiley_81','[胜利]': 'smiley_82','[抱拳]': 'smiley_83','[勾引]': 'smiley_84','[拳头]': 'smiley_85','[OK]': 'smiley_89','[跳跳]': 'smiley_92','[发抖]': 'smiley_93','[怄火]': 'smiley_94','[转圈]': 'smiley_95','[嘿哈]': 'e2_04','[捂脸]': 'e2_05','[奸笑]': 'e2_02','[机智]': 'e2_06','[皱眉]': 'e2_12','[耶]': 'e2_11','[红包]': 'e2_09','[發]': 'e2_09','[福]': 'e2_09','[鸡]': 'e2_14','[笑脸]': 'u1F604','[生病]': 'u1F637','[破涕为笑]': 'u1F602','[吐舌]': 'u1F61D','[脸红]': 'u1F633','[恐惧]': 'u1F631','[失望]': 'u1F614','[无语]': 'u1F612','[鬼魂]': 'u1F47B','[合十]': 'u1F64F','[强壮]': 'u1F4AA','[庆祝]': 'u1F389','[吃瓜]': 'smiley_313','[加油]': 'smiley_314','[汗]': 'smiley_315','[天啊]': 'smiley_316','[Emm]': 'smiley_317','[社会社会]': 'smiley_318','[旺柴]': 'smiley_319','[好的]': 'smiley_320','[打脸]': 'smiley_321','[哇]': 'smiley_322','[囧]': 'smiley_17'
    }const encodeEmoji = (str) => {if (!str) {return;}let domEle = <span>{str}</span>let pattern = /\[.*?\]/g;let unicodeStr = str.replace(pattern,function (match) {if(emojiJson[match]){domEle = <span className={`small qqface ${emojiJson[match]}`}></span>}else {domEle = <span>{match}</span>}})return domEle
    }export {encodeEmoji,emojiJson
    };
    

    css部分

  • .qqface {zoom: calc(22 / 64);display: inline-block;vertical-align: middle;width: 64px;height: 64px;font-size: 0;text-indent: -999em;background: url('../images/emoji.png') 0 0;&.e2_02 {background-position: -66px 0}&.e2_04 {background-position: -462px -396px}&.e2_05 {background-position: 0 -66px}&.e2_06 {background-position: -66px -66px}&.e2_09 {background-position: -132px 0}&.e2_11 {background-position: -132px -66px}&.e2_12 {background-position: 0 -132px}&.e2_14 {background-position: -66px -132px}&.smiley_0 {background-position: -132px -132px;}&.smiley_1 {width: 63px;// height: 64px;background-position: -660px -594px}&.smiley_10 {background-position: -198px -66px}&.smiley_11 {background-position: -198px -132px}&.smiley_12 {background-position: 0 -198px}&.smiley_13 {background-position: -66px -198px}&.smiley_14 {background-position: -132px -198px}&.smiley_15 {background-position: -198px -198px}&.smiley_17 {background-position: -264px 0}&.smiley_18 {background-position: -264px -66px}&.smiley_19 {background-position: -264px -132px}&.smiley_2 {background-position: -264px -198px}&.smiley_20 {background-position: 0 -264px}&.smiley_21 {background-position: -66px -264px}&.smiley_22 {background-position: -132px -264px}&.smiley_23 {background-position: -198px -264px}&.smiley_25 {background-position: -264px -264px}&.smiley_26 {background-position: -330px 0}&.smiley_27 {background-position: -330px -66px}&.smiley_28 {background-position: -330px -132px}&.smiley_29 {background-position: -330px -198px}&.smiley_3 {background-position: -330px -264px}&.smiley_30 {background-position: 0 -330px}&.smiley_31 {background-position: -66px -330px}&.smiley_313 {background-position: -132px -330px}&.smiley_314 {background-position: -198px -330px}&.smiley_315 {background-position: -264px -330px}&.smiley_316 {background-position: -330px -330px}&.smiley_317 {background-position: -396px 0}&.smiley_318 {background-position: -396px -66px}&.smiley_319 {background-position: -396px -132px}&.smiley_32 {background-position: -396px -198px}&.smiley_320 {background-position: -396px -264px}&.smiley_321 {background-position: -396px -330px}&.smiley_322 {background-position: 0 -396px}&.smiley_33 {background-position: -66px -396px}&.smiley_34 {background-position: -132px -396px}&.smiley_36 {background-position: -198px -396px}&.smiley_37 {background-position: -264px -396px}&.smiley_38 {background-position: -330px -396px}&.smiley_39 {background-position: -396px -396px}&.smiley_4 {background-position: -462px 0}&.smiley_40 {background-position: -462px -66px}&.smiley_41 {background-position: -462px -132px}&.smiley_42 {background-position: -462px -198px}&.smiley_44 {background-position: -462px -264px}&.smiley_45 {background-position: -462px -330px}&.smiley_46 {background-position: 0 0}&.smiley_47 {background-position: 0 -462px}&.smiley_48 {background-position: -66px -462px}&.smiley_49 {background-position: -132px -462px}&.smiley_5 {background-position: -198px -462px}&.smiley_50 {background-position: -264px -462px}&.smiley_51 {background-position: -330px -462px}&.smiley_52 {background-position: -396px -462px}&.smiley_54 {background-position: -462px -462px}&.smiley_55 {background-position: -528px 0}&.smiley_56 {background-position: -528px -66px}&.smiley_57 {background-position: -528px -132px}&.smiley_6 {background-position: -528px -198px}&.smiley_60 {background-position: -528px -264px}&.smiley_61 {background-position: -528px -330px}&.smiley_62 {background-position: -528px -396px}&.smiley_63 {background-position: -528px -462px}&.smiley_64 {background-position: 0 -528px}&.smiley_65 {background-position: -66px -528px}&.smiley_66 {background-position: -132px -528px}&.smiley_67 {background-position: -198px -528px}&.smiley_68 {background-position: -264px -528px}&.smiley_7 {background-position: -330px -528px}&.smiley_70 {background-position: -396px -528px}&.smiley_74 {background-position: -462px -528px}&.smiley_75 {background-position: -528px -528px}&.smiley_76 {background-position: -594px 0}&.smiley_78 {background-position: -594px -66px}&.smiley_79 {background-position: -594px -132px}&.smiley_8 {background-position: -594px -198px}&.smiley_80 {background-position: -594px -264px}&.smiley_81 {background-position: -594px -330px}&.smiley_82 {background-position: -594px -396px}&.smiley_83 {background-position: -594px -462px}&.smiley_84 {background-position: -594px -528px}&.smiley_85 {background-position: 0 -594px}&.smiley_89 {background-position: -66px -594px}&.smiley_9 {background-position: -132px -594px}&.smiley_92 {background-position: -198px -594px}&.smiley_93 {background-position: -264px -594px}&.smiley_94 {background-position: -330px -594px}&.smiley_95 {background-position: -396px -594px}&.u1F381 {background-position: -462px -594px}&.u1F389 {background-position: -528px -594px}&.u1F47B {background-position: -594px -594px}&.u1F4AA {background-position: -660px 0}&.u1F602 {background-position: -660px -66px}&.u1F604 {background-position: -660px -132px}&.u1F612 {background-position: -660px -198px}&.u1F614 {background-position: -660px -264px}&.u1F61D {background-position: -660px -330px}&.u1F631 {background-position: -660px -396px}&.u1F633 {background-position: -660px -462px}&.u1F637 {background-position: -198px 0}&.u1F64F {background-position: -660px -528px}&.smiley_400 {background-position: -264px 0}
    }
    

    参考:emoji.js - 简书最近公司 项目有个需求是,回显微信聊天记录。内容显示微信正常聊天对话 在此今天说下回显微信常用表情 产品的预期 我的预期 [微笑]微笑[撇嘴]撇嘴哈哈哈哈哈哈[微笑][撇嘴]...https://www.jianshu.com/p/7f2dad75ad57

react中渲染企业微信的表情相关推荐

  1. react 中渲染html_如何在React中识别和解决浪费的渲染

    react 中渲染html by Nayeem Reza 通过Nayeem Reza 如何在React中识别和解决浪费的渲染 (How to identify and resolve wasted r ...

  2. 企业微信监控服务器数据接入,如何在alertmanager报警中添加企业微信监控报警

    如何在alertmanager报警中添加企业微信监控报警 发布时间:2020-06-17 15:19:06 来源:亿速云 阅读:535 作者:元一 栏目:云计算 Prometheus机器:172.27 ...

  3. linux系统可以安装企业微信,在Deepin中使用企业微信遇到错误的解决,附微信又升级的处理方法...

    有不少在深度Deepin操作系统中使用企业微信的用户遇到弹出的错误报告:企业微信遇到错误,给您带来不便,我们深表歉意.程序总是崩溃运行不起来,可选择发送错误报告和重启程序,如下图所示: 解决方法 删除 ...

  4. app中使用企业微信sdk分享小程序报错:小程序路径错误,加载超时 解决办法。

    问题描述: 在app中,需要调用企业微信skd,分享小程序给客户,客户打开小程序. 如果客户直接是企业微信中的,可以在企业微信中打开小程序. 但是,如果客户是微信中,用户在微信中打开小程序就报错. i ...

  5. 持续集成之企业微信通知:5:在Jenkins中向企业微信推送消息

    在这篇文章中结合具体的示例来介绍在Jenkins中如何向企业微信群推送消息. 环境准备 这里使用Easypack的Jenkins 2.164.3来创建验证用的Jenkins环境.使用如下步骤即可完成. ...

  6. 微信开发者中调试企业微信小程序

    在微信开发者中要调试企业微信的小程序必须使用企业微信小程序插件: 该插件可通过 [设置]->[扩展设置]->[模拟器插件]中获取 安装完成之后更改运行模式.更改成[企业微信小程序模式]运行 ...

  7. 歌谣学前端之React中渲染列表

    前言 我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 ...

  8. react 嵌套渲染_React 中嵌套数组数据如何渲染到前端页面

    现在有后端提供的类似下面这种格式的数据 { status:X, body: [ {year: 2017, month: [December, October, ...]} {year: 2016, m ...

  9. EasySQLMAIL中企业微信的配置方法

    EasySQLMAIL1.0.1208中提供了企业微信消息的发送功能.可以发送文字消息和文件消息(如Excel和PDF). 企业微信的配置分两步:1-添加企业信息(要用到企业微信的"企业ID ...

最新文章

  1. android使用webview上传文件,Android项目中如何在webview页面中上传文件
  2. python 数组中第k个最大元素
  3. NS2仿真分析无线网络的攻击防御(1)
  4. 操作系统课设之简单 shell 命令行解释器的设计与实现
  5. Sql server安装时出现找不到vc_red.msi错误
  6. jquery的pagination插件实现无刷新的分页
  7. JSONObject.toBean方法复制不成功
  8. [20190816]12c执行exec SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS()报错.txt
  9. uniapp实现头像上传
  10. C# WinForm中NotifyICon控件的用法
  11. c语言汉字utf8,C语言汉字gbk转utf-8
  12. 什么是SLA?SLA服务水平深度解析
  13. 图情论文笔记 | 智慧图书馆下的阅读推广服务策略
  14. OSAL 之功耗管理
  15. C#图片加载与内存释放
  16. sketch首款主题管理插件-主题大师
  17. 家长育儿风格决定教育效果!
  18. 学 Python 必看的书单汇总
  19. ACT游戏引擎设计及DEMO展示
  20. Win10休眠模式设置:开机后自动恢复工作界面,防止程序员虐待电脑

热门文章

  1. 计算机卸载软件后网络上不去了,电脑上有无法卸载的软件怎么办?
  2. 陕西电大成考计算机考试模拟题,山东广播电视大学成人教育2020学年计算机应用基础-考试...
  3. C++ | vector 类中的 push_back( ) 函数 、(添加和删除函数)
  4. 微信小程序实战:智能水印相机小程序开发附源码
  5. wimdns服务器未响应,win7常见问题100例.doc
  6. ASP.NET MVC 发布IIS HTTP 错误 403.14 - Forbidden
  7. Android 判断手机是否有传感器
  8. 牛客——动态规划专项
  9. 慧数汽车大数据分析:车市竞争将由打造爆款向构建“产品矩阵”转型
  10. 流量劫持和dns劫持_劫持小偷的心