我有一个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 ;

}

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

  1. 如何将asc文件转换成的txt文件,并导入到sql server中?

    最近的工作是利用Arcgis处理得到pixels 数据,再用erdas 软件将pixels 数据转换成 ASCII码,最终生成了asc文件(文件中的数据每3个数据为一组,分别表示了: 横坐标X:纵坐标 ...

  2. php将html实体转换成字符串

    定义和用法 htmlspecialchars_decode() 函数把一些预定义的 HTML 实体转换为字符. 会被解码的 HTML 实体是: & 成为 & (和号) " 成 ...

  3. 将一个实体转换成 Url 参数的形式 ?a=ab=b

    function toQueryString(obj) { var ret = []; for (var key in obj) { key = encodeURIComponent(key); va ...

  4. wps将批量数字转换成条形码_excel表格怎么把数据转换条形码-WPS表格中怎么把数字还原成条形码,本来是条形码的。...

    在EXcel表格里怎样把文字生成条码? EXCEL的数字,可以使用打印软件导入转换为条码格比较流行的条码打印软件支持EXCEL做数据库的导入的. 以下为Bartender为例: 打开菜单"文 ...

  5. javascript汉字转换成拼音

    javascript汉字转换成拼音 分类 JavaScript 2007-9-27 7:16:38 浏览 13791 回复 0 隐藏侧边栏 转自 www.div-css.com . 阅读 编辑 运行 ...

  6. 如何将实体关系图转换成关系模式

      一个实体转换成一个关系模式. 首先,通过visio绘制一个与学生实体有联系的几个E-R图.如下图所示 其中矩形表示的是实体(班级,学生,课程,学习账号),椭圆表示的是属性,菱形表示的是联系(拥有, ...

  7. javascript开发微信小程序,怎么把手写稿子转换成word,如何快速把手稿转换为电子稿

    // 为给定 ID 的 user 创建请求 axios.get('/user?ID=12345').then(function (response) {console.log(response);}) ...

  8. php+转为文本,PHP将HTML转换成文本的实现代码

    PHP将HTML转换成文本的实现代码 核心代码: // $document 应包含一个 HTML 文档. // 本例将去掉 HTML 标记,javascript 代码 // 和空白字符.还会将一些通用 ...

  9. java 实体属性个数_?Java中比较实用实体转换工具介绍

    ​Java中比较实用实体转换工具介绍 文中源码地址 大家一般编码过程中,经常会遇到DO对象转化为DTO对象,对象和对象之间转换一般需要用到转换工具,毕竟使用getter/setter太过麻烦 DO:D ...

最新文章

  1. vue-自定义过滤器--时间
  2. 国服服务器_《Minecraft我的世界》第三方服务器的基本储备
  3. 【Leetcode | 235】 235. 二叉搜索树的最近公共祖先
  4. 九度OJ #1437 To Fill or Not to Fil
  5. 【行业翘楚】井田云:化解线上线下冲突让鱼与熊掌皆得
  6. python语法31[with来自动释放对象]
  7. pytorch学习笔记(三十九):Fine-Tuning
  8. c语言选题分析,c语言方面毕业设计选题.doc
  9. cocoapods 总结
  10. 图片在线转换成word免费版
  11. XHR 和 Fetch 的使用详解和区别总结
  12. pyautogui在网页内写入excel文件内容
  13. Hive面试基本须知
  14. Ventoy:u盘制作,usb启动盘,超级好用的装机神器
  15. 卓聚社区,新发现的全能社区
  16. 五类 六类网线相关知识
  17. java 外文翻译_计算机 java 外文翻译 外文文献 英文文献
  18. 具有资源开放性的物联网能力要求
  19. Fedora 22 for arndale octa board
  20. AWS S3数据传输实验

热门文章

  1. 程序员从优秀到卓越的几点建议
  2. Elasticsearch Pipeline 详解
  3. 基于JindoFS+OSS构建高效数据湖
  4. 言图科技:GPU服务器选型
  5. 【物联网开发实战】- 设备上云方案详解?
  6. 阿里开发者招聘节 | 面试题05: 关于epoll和select的区别,哪些说法是正确的?
  7. Michael Jordan:当下的AI其实都是伪“AI” 1
  8. 不用跑项目,组件效果所见即所得,绝了!
  9. 霍因科技获首届全国信创产业生态创新奖
  10. 数据平台、大数据平台、数据中台……傻傻分不清?这次终于有人讲明白了!