Jon*_*der 9 javascript reactjs
我有一个React组件,我想为其道具分配一个包含JavaScript变量和HTML实体的字符串。
我尝试过的一些方法导致HTML实体被转义。例如,–从字面上呈现为“ –”而不是“ –”。
有没有办法让HTML实体在分配给React道具的JSX动态内容块中呈现为未转义?
尝试使用模板文字:
<MyPanel title={`${name} – ${description}`}> ... </MyPanel>
Run Code Online (Sandbox Code Playgroud)
问题:在渲染的输出中,–字面被渲染为“ –”而不是“ –”。
尝试构建一些不带引号的简单JSX:
<MyPanel title={{name} – {description}} ... </MyPanel>
Run Code Online (Sandbox Code Playgroud)
问题:这在编译时失败,出现语法错误。
尝试通过将JSX包装在一个<span />元素中来解决语法错误:
<MyPanel title={<span>{name} – {description}</span>} ... </MyPanel>
Run Code Online (Sandbox Code Playgroud)
问题:这可行,但是我宁愿避免<span />渲染输出中存在多余的元素。
尝试将HTML实体替换为Unicode数字字符引用:
<MyPanel title={name + ' \u2013 ' + description} ... </MyPanel>
Run Code Online (Sandbox Code Playgroud)
问题:
+-operator串联,这会Unexpected string concatenation prefer-template在我的团队的JSLint检查器中触发错误;使用字符串插值的解决方案会更好。您可避免多余的span了Fragment:
<MyPanel title={<>{name} – {description}</>} ... </MyPanel>
Run Code Online (Sandbox Code Playgroud)
这个功能是在React 16.2中引入的。
请参阅文档
我同意@samanime的观点,即在简单的情况下,最好使用实际字符,但是如果您的内容是真正动态的,我宁愿使用或方法Fragment也不使用。entityToChardangerouslySetInnerHTML
以下是一些选项(我不久前在更一般的答案中概述了这些选项):
最简单-使用Unicode
<MyPanel title={ `${name} – ${description}` } />
Run Code Online (Sandbox Code Playgroud)更安全-在Javascript字符串中为实体使用Unicode数字。
<MyPanel title={`${name} \u2013 ${description}`} />
Run Code Online (Sandbox Code Playgroud)
要么
<MyPanel title={`${name} ${String.fromCharCode(8211)} ${description}`} />
Run Code Online (Sandbox Code Playgroud)不得已-使用dragonallySetInnerHTML插入原始HTML。
title={`${name} – ${description}`}
Run Code Online (Sandbox Code Playgroud)
与:
<div dangerouslySetInnerHTML={{__html: props.title}}></div>
Run Code Online (Sandbox Code Playgroud)<MyPanel title={ `${name} – ${description}` } />
Run Code Online (Sandbox Code Playgroud)
<MyPanel title={`${name} \u2013 ${description}`} />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6617 次 |
| 最近记录: |