html实体转换成xa0,关于javascript:反应道具:在JSX动态内容中使用HTML实体?

我有一个React组件,我想为其道具分配一个包含JavaScript变量和HTML实体的字符串。

我尝试过的一些方法导致HTML实体被转义。例如,从字面上呈现为" "而不是" –"。

有没有办法让HTML实体在分配给React道具的JSX动态内容块中呈现为未转义?

尝试了

使用模板文字尝试:

...

问题:在渲染的输出中,的字面显示为" ",而不是" –"。

尝试构建一些不带引号的简单JSX:

问题:这在编译时失败,出现语法错误。

通过将JSX包装在元素中来尝试解决语法错误:

{name}  {description}} ...

问题:可以,但是我宁愿避免在渲染输出中出现多余的元素。

尝试将HTML实体替换为Unicode数字字符引用:

问题:

这可行,但是(我认为)使代码少了一点

可读的。 (更明显的是," ndash"而不是" 2013"

代表一个破折号。)

同样,这涉及到+-运算符的串联,这会在我团队的JSLint检查器中触发Unexpected string concatenation prefer-template错误。使用字符串插值的解决方案会更好。

的子元素上的dangerouslySetInnerHTML是否有效?

将其分配给变量,然后使用它:let temp_str = $ {name} $ {description}``

@Tony:在title属性中使用。

@ T.J.Crowder我看到了title道具,但是(也许是错误的?)假设将呈现一些实际元素,例如h1,div,p等。

如果您用一个最小的可重现的示例演示问题来更新您的问题,这将对人们有所帮助,最好是使用Stack Snippets([<>]工具栏按钮)可运行的示例。堆栈片段支持React,包括JSX;这是怎么做的。

@Tony:考虑到span起作用的事情,您可能是对的。但是,在prop中允许HTML,然后使用dangerouslySetInnerHTML将会很危险。 :-D

@ T.J。Crowder哦,绝对可以!

Im AGAINS React在字符串变量中用–替换了,因为当您希望按原样显示字符串时(例如,显示用户评论),此功能需要对其进行预处理。这种替换仅适用于JSX(几乎是HTML)。

您可以使用Fragment避免多余的span:

{name}  {description}>} ...

这个功能是在React 16.2中引入的。

请参阅文档

我同意@samanime的观点,使用实际字符最适合简单的情况,但是如果您的内容真正是动态的,我宁愿使用Fragment而不是entityToChar或dangerouslySetInnerHTML方法。

以下是一些选项(我不久前在较笼统的答案中概述了这些选项):

最简单-使用Unicode

更安全-在Javascript字符串中为实体使用Unicode数字。

要么

不得已-使用dragonallySetInnerHTML插入原始HTML。

title={`${name}  ${description}`}

与:

const MyPanel = (props) => {

return (

{props.title}

)

}

const MyPanelwithDangerousHTML = (props) => {

return (

)

}

var description ="description";

var name ="name";

ReactDOM.render(

, document.getElementById("option1"));

ReactDOM.render(

, document.getElementById("option2"));

ReactDOM.render(

, document.getElementById("option3"));

ReactDOM.render(

, document.getElementById("option4"));

这是React关于HTML实体的文档:JSX陷阱

其中,最好使用实际字符而不是HTML实体:

如果由于HTML实体是动态的而不能这样做(这不仅仅是硬编码的破折号),则可以翻译该实体。这是一个可以执行此操作的小功能:

const entityToChar = str => {

const textarea = document.createElement('textarea');

textarea.innerHTML = str;

return textarea.value;

}

然后,您可以像这样使用它:

当然,问题在于,就像dangerouslySetInnerHTML一样,这意味着组件很高兴地呈现通过道具接收到的HTML内容,就像dangerouslySetInnerHTML一样,这是危险的。 :-)

它比dangerouslySetInnerHTML好一点,因为它随后会以textarea值的形式返回,这会剥离很多HTML。

由于您可能不想在title道具中允许使用任意URL,因此我很想为自己编写一个仅处理将字符实体转换为等效Unicode字符的函数。有点像" HTML-lite"。 :-)实际上,命名引用并不多;和数字的很容易:

const named = {

"ndash":"–", // or"\u2013"

"mdash":"—", // or"\u2014"

"nbsp":""   // or"\u00A0"

// ...

};

// Obviously this is a SKETCH, not production code!

function convertCharEntities(str) {

return str.replace(/&([^ ;&]+);/g, (_, ref) => {

let ch;

if (ref[0] ==="#") {

let num;

if (ref[0].toLowerCase() ==="x") {

num = parseInt(ref.substring(2), 16);

} else {

num = parseInt(ref, 10);

}

ch = String.fromCodePoint(num);

} else {

ch = named[ref.toLowerCase()];

}

return ch ||"";

});

}

然后在渲染该道具时使用它:

class Example extends React.Component {

render() {

return {convertCharEntities(this.props.title ||"")};

}

}

完整直播示例:

const named = {

"ndash":"–", // or"\u2013"

"mdash":"—", // or"\u2014"

"nbsp":""   // or"\u00A0"

// ...

};

// Obviously this is a SKETCH, not production code!

function convertCharEntities(str) {

return str.replace(/&([^ ;&]+);/g, (_, ref) => {

let ch;

if (ref[0] ==="#") {

let num;

if (ref[0].toLowerCase() ==="x") {

num = parseInt(ref.substring(2), 16);

} else {

num = parseInt(ref, 10);

}

ch = String.fromCodePoint(num);

} else {

ch = named[ref.toLowerCase()];

}

return ch ||"";

});

}

class Example extends React.Component {

render() {

return {convertCharEntities(this.props.title ||"")};

}

}

ReactDOM.render(

,

document.getElementById("root")

);

请注意,标签未作为标签输出,但已处理实体。

不知道的工作方式,我只能推测您可以执行以下操作:

...

MyPanel.js

render() {

const { title } = this.props;

return ;

}

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

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

相关文章

基于Lucene查询原理分析Elasticsearch的性能

前言 Elasticsearch是一个很火的分布式搜索系统&#xff0c;提供了非常强大而且易用的查询和分析能力&#xff0c;包括全文索引、模糊查询、多条件组合查询、地理位置查询等等&#xff0c;而且具有一定的分析聚合能力。因为其查询场景非常丰富&#xff0c;所以如果泛泛的分析其…

首次落地中国大陆的OpenInfra:中国对于开源做出的贡献力量已不可忽视

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹责编 | 阿秃一张标志着上海现代建筑地标的东方明珠海报&#xff0c;另一张展示着上海悠久历史的豫园景区海报&#xff0c;不仅向我们展示了这座城市浓厚的历史气息与现代化的繁荣&#xff0c;也让我们看到了OpenStack历经…

java类验证和装载顺序_Java类的加载机制和双亲委派模型

Java类的加载机制和双亲委派模型1类的加载机制类从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期包括了&#xff1a;加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和…

任正非:华为 5G 是瞎猫碰死老鼠

喜欢话糙理不糙的任正非&#xff0c;又飙金句。11月6日&#xff0c;在和彭博社记者对话时&#xff0c;谈到华为5G&#xff0c;他说&#xff1a;“回顾这个过程&#xff0c;我们也没有什么必胜的信心&#xff0c;有时候也是瞎猫碰上了死老鼠&#xff0c;刚好碰上世界是这个需求。…

html5游戏开发box2djs,Box2D.js简易示例

Box2dWeb example//在页面加载完毕后启动整个Box2D程序function init() {//简化缩写各个对象名称var b2Vec2 Box2D.Common.Math.b2Vec2;var b2AABB Box2D.Collision.b2AABB;var b2BodyDef Box2D.Dynamics.b2BodyDef;var b2Body Box2D.Dynamics.b2Body;var b2FixtureDef Bo…

七个不容易被发现的生成对抗网络(GAN)用例

像许多追随AI发展的人一样&#xff0c;我无法忽略生成建模的最新进展&#xff0c;尤其是图像生成中生成对抗网络&#xff08;GAN&#xff09;的巨大成功。看看下面这些样本&#xff1a;它们与真实照片几乎没有区别&#xff01; 从2014年到2018年&#xff0c;面部生成的进展也非…

floquet端口x极化入射波_请问CST 2012 floquet中的模式设置

大家好&#xff0c;我用的是CST2012&#xff0c;我已经知道floquet中的TE00和TM00分别代表两种互相正交的线偏振的平面波&#xff0c;那如果我想模拟一束非偏振的平面波入射应该怎么设置?另外&#xff0c;如果我是用TE00的偏振光入射&#xff0c;那么在计算透射率的时候在透射…

端口占用8080

1. winr键输入cmd进入命令行&#xff1a;执行以下命令&#xff1a; netstat -ano 2. 找到8080端口对应的pid 3. 打开任务管理器&#xff1a;找到对应的pid&#xff0c;右击结束任务即可

华为人到底几点钟下班?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 程序猿责编 | 阿秃转自 &#xff5c; 鲜枣课堂近日&#xff0c;在职场论坛上有这样一个帖子&#xff1a;华为员工晒出7天的上班打卡记录。该员工晒出自己在 9 月份 23 号到 29 号的打卡记录。其中每天 9 点 30 之前打卡&am…

手把手教你数据不足时如何做深度学习NLP

作为数据科学家&#xff0c;你最重要的技能之一应该是为你的问题选择正确的建模技术和算法。几个月前&#xff0c;我试图解决文本分类问题&#xff0c;即分类哪些新闻文章与我的客户相关。 我只有几千个标记的例子&#xff0c;所以我开始使用简单的经典机器学习建模方法&#…

怎样判断一个网站是不是前后端分离的?

1.页面右击选择【检查】或者打开谷歌开发者模式 2.选择【NetWork】&#xff0c;重新刷新页面 3. 选择XHR 全称(xmlhttprequest)&#xff0c;后&#xff0c;下面会有地址列表&#xff1b;查看页面的数据是从页面渲染的数据还是通过后端api接口获取的 4.左侧点击第一个链接&…

vue 圆形 水波_vue项目百度地图+echarts的涟漪水波效果

先看效果image.pngid"allmap"class"map"ref"map">import echarts from "echarts";import "echarts/extension/bmap/bmap";export default {data() {return {chart: echarts.ECharts,bmap: {},mapZoom: 6,};},mounted() {…

五年,时间告诉我只有自己强大才是真的强大!

曾经以为&#xff0c;阿里可能只是自己经过的一个小小驿站。 却没想到&#xff0c;一来就是五年。 当我们问起那些来了五年的阿里人&#xff1a;过去的这五年里&#xff0c;最“值得”的是什么&#xff1f; 他们这样说—— 回忆起和主管一起坐摩托车去拜访客户的兴奋&#x…

AI:为你写诗,为你做不可能的事

戳蓝字“CSDN云计算”关注我们哦&#xff01; 最近&#xff0c;一档全程高能的神仙节目&#xff0c;高调地杀入了我们的视野&#xff1a;没错&#xff0c;就是撒贝宁主持&#xff0c;董卿、康辉等央视名嘴作为评审嘉宾&#xff0c;同时集齐央视“三大名嘴”同台的央视《主持人大…

计算机怎么远程桌面,电脑远程桌面如何连接 电脑远程桌面连接方法【详解】...

电脑远程桌面如何连接?利用远程控制软件办公的方式不仅大大缓解了城市交通状况&#xff0c;减少了环境污染&#xff0c;还免去了人们上下班路上奔波的辛劳&#xff0c;更可以提高企业员工的工作效率和工作兴趣。除此之外&#xff0c;可以突破时间空间的限制&#xff0c;大大提…

@RequestParam注解使用

当前端请求方式为&#xff1a;x-www-form-urlencoded 后端怎样接收呢&#xff1f;第一种场景&#xff1a; 当前端传递的参数和后端定义接收的变量一致 例如&#xff1a;前端 &#xff1a;username 后端接收定义的变量username#后端接收方式&#xff1a; RestController Reques…

word怎么改正错误单词_在word 里要怎么让电脑自动识别错误的英语单词?

word自动识别错误的英语单词&#xff1a;1、点击菜单栏的审阅-拼写和语法&#xff1b;2、在可能错误的单词下有红色波浪形&#xff0c;右侧可以看到提示&#xff1a;在word 里要怎么让电脑自动识别错误的英语单词&#xff1f;word自动识别错误的英语单词&#xff1a;1、点击菜单…

工程师如何“神还原”用户问题?闲鱼回放技术揭秘

我们透过系统底层来捕获ui事件流和业务数据的流动&#xff0c;并利用捕获到的这些数据通过事件回放机制来复现线上的问题。本文先介绍录制和回放的整体框架&#xff0c;接着介绍里面涉及到的3个关键技术点&#xff0c;也是这里最复杂的技术&#xff08;模拟触摸事件&#xff0c…

html5怎么设置字体闪动,HTML最简单的文字闪烁代码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Titlekeyframes blink{0%{opacity: 1;}50%{opacity: 1;}50.01%{opacity: 0;}100%{opacity: 0;}}-webkit-keyframes blink {0% { opacity: 1; }50% { opacity: 1; }50.01% { opacity: 0; }100% { opacity: 0; }}-moz-keyframes blin…

英特尔推出世界最大 FPGA 芯片;任正非表示华为尚未直接和美国公司商谈5G技术授权;OpenTitan开源……...

戳蓝字“CSDN云计算”关注我们哦&#xff01; 嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…