Ascii/HTML 字符代码在 React 变量中不起作用

for*_*yez 9 html javascript jsx reactjs

我有一个复选标记的 ascii/html 代码:✔

✔
Run Code Online (Sandbox Code Playgroud)

如果我去,作为反应:

<div>&#10004;</div>
Run Code Online (Sandbox Code Playgroud)

那么它的工作原理。但如果我去

var str = '&#10004;';
<div>{str}</div>
Run Code Online (Sandbox Code Playgroud)

它没有。它显示为&#10004;

有任何想法吗?

Jor*_*ing 5

通过查看实际渲染的内容,很容易看出这里发生了什么:

const checkmark = '&#100004;';

ReactDOM.render(<div id="x">{checkmark}</div>,
  document.getElementById('container'));

console.log(document.getElementById('x').innerHTML);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script><div id="container"/>
Run Code Online (Sandbox Code Playgroud)

如您所见,React 转义其输出,替换&&amp;正如预期的那样

最简单且正确的解决方案是转储 HTML 实体并直接使用该字符:

class Hello extends React.Component {
  render() {
    var checkmark = '?';
    return <div>Hello {checkmark}</div>;
  }
}

ReactDOM.render(<Hello />, document.getElementById('container'));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script><div id="container"/>
Run Code Online (Sandbox Code Playgroud)

只要您的页面编码正确声明为 UTF-8,这将适用于所有浏览器。