【发布时间】:2018-07-26 13:48:41
【问题描述】:
我有一个React component,我想为其分配一个包含 JavaScript 变量和 HTML 实体的字符串。
我尝试的一些方法导致 HTML 实体被转义。例如,– 按字面意思呈现为“–”而不是“–”。
有没有办法让 HTML 实体在分配给 React 道具的 JSX 动态内容块中以非转义形式呈现?
尝试
尝试使用template literal:
<MyPanel title={`${name} – ${description}`}> ... </MyPanel>
问题:在渲染输出中,&ndash; 按字面意思渲染为“&ndash;”而不是“–”。
尝试构造一些不带引号的简单 JSX:
<MyPanel title={{name} – {description}} ... </MyPanel>
问题:这在编译时因语法错误而失败。
尝试通过将 JSX 包装在 <span /> 元素中来解决语法错误:
<MyPanel title={<span>{name} – {description}</span>} ... </MyPanel>
问题:这可行,但我宁愿避免渲染输出中出现多余的 <span /> 元素。
尝试用 Unicode 数字字符引用替换 HTML 实体:
<MyPanel title={name + ' \u2013 ' + description} ... </MyPanel>
问题:
- 这可行,但(在我看来)使代码少了一点 可读。 (更明显的是“ndash”而不是“2013” 表示一个短划线字符。)
- 此外,这涉及
+-operator 连接,这会在我团队的JSLint 检查器中触发Unexpected string concatenation prefer-template错误;使用字符串插值的解决方案会更好。
【问题讨论】:
-
dangerouslySetInnerHTML对<MyPanel />的子元素是否有效? -
将其赋值给一个变量,然后使用它:
let temp_str =${name} – ${描述}`` -
@Tony:它被用于
title属性中。 -
@Tony:你可能是对的,因为
span已经工作了。但是,在 prop 中允许 HTML 然后使用dangerouslySetInnerHTML会......很危险。 :-D -
@T.J.Crowder 哦,绝对是!
标签: javascript reactjs