当标签附加在文本中时,reactjs 无法识别 html 标签
reactjs cannot recognize html tags when the tag is appended in the text
我是 React 新手,我正在尝试为以下情况找到最佳方法:
我有一大段文字,我需要先将其拆分为段落级别并将每个段落包装在 span 中,然后将整个结果放在一个 span 中。
这是我现在可以使用的代码:
/**
* Created by hminaee on 12/26/2016.
*/
import React from "react";
require("../../../../css/story/body/story-body.css");
require("../../../../css/common/common.css");
export class StoryBodyText extends React.Component{
constructor(props){
super();
}
componentWillMount(){
}
componentDidMount(){
}
/**
*
* @param text
* @returns {string}
*/
paragraphGenerator(text){
var paragraphs=text.split(/\n/g) ;
return paragraphs;
}
render() {
return (
<div className="col-xs-12">
<div className="col-xs-1"></div>
<div className="col-xs-10 txt-align-left body-text">{this.paragraphGenerator(this.props.storyText).map((item,i)=> <span >{item}</span>)}</div>
<div className="col-xs-1"></div>
</div>
);
}
}
如您所见,我有一个解决方法,我 return 一组句子,然后循环遍历它们并跨越每个句子。然而,我喜欢做的是这样的:
paragraphGenerator(text){
//var example = "X Y\nX1 Y1\nX2 Y2. mmmmm";
var paragraphs=text.split( /\n/g) ;
var wrapedText="";
for(var i=0;i<paragraphs.length;i++){
wrapedText=wrapedText+"<span>"+paragraphs[i]+"</span>";
}
return wrapedText;
}
所以在这里我创建了带有 span 的文本,而不是遍历数组我想这样做:
<div className="col-xs-10 txt-align-left body-text">{this.paragraphGenerator(this.props.storyText)}</div>
但这不起作用,当我打开浏览器时,我看到的不是用 span 包裹的文本:
<span>some text</span>
所以跨度不被识别为 html 标签。现在我的问题是,有没有办法通过第二种方法做到这一点?
您可以像这样使用反应 属性 dangerouslySetInnerHTML
:
<div className="col-xs-10 txt-align-left body-text" dangerouslySetInnerHTML={this.paragraphGenerator(this.props.storyText)}></div>
Link 到文档:Docs
我是 React 新手,我正在尝试为以下情况找到最佳方法:
我有一大段文字,我需要先将其拆分为段落级别并将每个段落包装在 span 中,然后将整个结果放在一个 span 中。
这是我现在可以使用的代码:
/**
* Created by hminaee on 12/26/2016.
*/
import React from "react";
require("../../../../css/story/body/story-body.css");
require("../../../../css/common/common.css");
export class StoryBodyText extends React.Component{
constructor(props){
super();
}
componentWillMount(){
}
componentDidMount(){
}
/**
*
* @param text
* @returns {string}
*/
paragraphGenerator(text){
var paragraphs=text.split(/\n/g) ;
return paragraphs;
}
render() {
return (
<div className="col-xs-12">
<div className="col-xs-1"></div>
<div className="col-xs-10 txt-align-left body-text">{this.paragraphGenerator(this.props.storyText).map((item,i)=> <span >{item}</span>)}</div>
<div className="col-xs-1"></div>
</div>
);
}
}
如您所见,我有一个解决方法,我 return 一组句子,然后循环遍历它们并跨越每个句子。然而,我喜欢做的是这样的:
paragraphGenerator(text){
//var example = "X Y\nX1 Y1\nX2 Y2. mmmmm";
var paragraphs=text.split( /\n/g) ;
var wrapedText="";
for(var i=0;i<paragraphs.length;i++){
wrapedText=wrapedText+"<span>"+paragraphs[i]+"</span>";
}
return wrapedText;
}
所以在这里我创建了带有 span 的文本,而不是遍历数组我想这样做:
<div className="col-xs-10 txt-align-left body-text">{this.paragraphGenerator(this.props.storyText)}</div>
但这不起作用,当我打开浏览器时,我看到的不是用 span 包裹的文本:
<span>some text</span>
所以跨度不被识别为 html 标签。现在我的问题是,有没有办法通过第二种方法做到这一点?
您可以像这样使用反应 属性 dangerouslySetInnerHTML
:
<div className="col-xs-10 txt-align-left body-text" dangerouslySetInnerHTML={this.paragraphGenerator(this.props.storyText)}></div>
Link 到文档:Docs