我正在使用React构建一些东西,我需要在JSX中使用React Variables插入HTML。有没有办法让变量像这样:
var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
并将其插入反应中,让它有效吗?
render: function() {
return (
<div className="content">{thisIsMyCopy}</div>
);
}
并按预期插入HTML?我还没有看到或听到任何有关可以执行此内联的反应函数的信息,或者解析可以使其工作的事物的方法。
答案 0 :(得分:234)
您可以使用dangerouslySetInnerHTML,例如
render: function() {
return (
<div className="content" dangerouslySetInnerHTML={{__html: thisIsMyCopy}}></div>
);
}
答案 1 :(得分:78)
请注意,如果您不知道正在注入的HTML字符串中的内容,dangerouslySetInnerHTML
会很危险。这是因为恶意客户端代码可以通过脚本标记注入。 / p>
如果您不是100%确定要呈现的HTML是XSS(跨站脚本),那么通过 DOMPurify 等实用程序清理HTML字符串可能是一个好主意。 )安全。
示例:
import DOMPurify from 'dompurify'
const thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
render: function() {
return (
<div className="content" dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(thisIsMyCopy)}}></div>
);
}
答案 2 :(得分:7)
通过使用''
,你将它变为字符串。使用没有引号可以正常工作。
答案 3 :(得分:2)
为了避免linter错误,我这样使用它:
render() {
const props = {
dangerouslySetInnerHTML: { __html: '<br/>' },
};
return (
<div {...props}></div>
);
}
答案 4 :(得分:2)
import { Fragment } from 'react' // react version > 16.0
var thisIsMyCopy = (
<Fragment>
<p>copy copy copy
<strong>strong copy</strong>
</p>
</Fragment>
)
通过使用''将值设置为字符串,React无法知道它是HTML元素。您可以执行以下操作以使React知道它是HTML元素-
''
,它会起作用<Fragment>
返回HTML元素。答案 5 :(得分:0)
您不需要任何特殊的库或“危险”属性。您可以只使用React Refs来操作DOM:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.divRef = React.createRef();
this.myHTML = "<p>Hello World!</p>"
}
componentDidMount() {
this.divRef.current.innerHTML = this.myHTML;
}
render() {
return (
<div ref={this.divRef}></div>
);
}
}
可以在此处找到工作示例:
答案 6 :(得分:-1)
答案 7 :(得分:-3)
如果还有其他人还在这里。使用ES6,您可以像这样创建html变量:
render(){
var thisIsMyCopy = (
<p>copy copy copy <strong>strong copy</strong></p>
);
return(
<div>
{thisIsMyCopy}
</div>
)
}
答案 8 :(得分:-3)