Javascript 使用Markdown to JSX包在React组件内将标记转换为HTML';s渲染函数
我正在从API中提取JSON数据。JSON包含来自社交媒体网站Steemit.com的博客文章。文章在标记中,我想从API中获取标记,将其转换为常规HTML,并将其显示在React组件中 这是我的渲染函数。API数据在Javascript 使用Markdown to JSX包在React组件内将标记转换为HTML';s渲染函数,javascript,html,reactjs,markdown,markup,Javascript,Html,Reactjs,Markdown,Markup,我正在从API中提取JSON数据。JSON包含来自社交媒体网站Steemit.com的博客文章。文章在标记中,我想从API中获取标记,将其转换为常规HTML,并将其显示在React组件中 这是我的渲染函数。API数据在componentDidMount中调用,由深度嵌套的对象组成。请原谅我的混乱 render() { const posts = Object.keys(this.state.myPosts); let page = posts.map((post, i) =&g
componentDidMount
中调用,由深度嵌套的对象组成。请原谅我的混乱
render() {
const posts = Object.keys(this.state.myPosts);
let page = posts.map((post, i) => {
return (
this.state.myPosts[posts[i]]["category"] === "utopian-io"
?
<div className="content-container">
<p>
<strong>Author: {this.state.myPosts[posts[i]]["author"]}</strong>
</p>
<p>
<strong>Title: {this.state.myPosts[posts[i]]["title"]}</strong>
</p>
<p>
<strong>Payout: {this.state.myPosts[posts[i]]["total_payout_value"]}</strong>
</p>
<p>{this.state.myPosts[posts[i]]["created"]}</p>
<p><span>Category: </span>{this.state.myPosts[posts[i]]["category"]}</p>
// Successfully renders the markup, but I want to convert this to HTML so it displays as HTML
<p>{this.state.myPosts[posts[i]]["body"]}</p>
// I have tried the following but I get a "not a string" console.error or the browser just crashes
<Markdown>{this.state.myPosts[posts[i]]["body"]}</Markdown>
</div>
:
null
);
});
return (
<div>
{page}
</div>
);
}
}
render(){
const posts=Object.keys(this.state.myPosts);
让page=posts.map((post,i)=>{
返回(
this.state.myPosts[posts[i][“category”]=“乌托邦io”
?
作者:{this.state.myPosts[posts[i]][“Author”]}
Title:{this.state.myPosts[posts[i]][“Title”]}
支出:{this.state.myPosts[posts[i]][“总支出值”]}
{this.state.myPosts[posts[i][“created”]}
类别:{this.state.myPosts[posts[i][“Category”]}
//成功呈现标记,但我想将其转换为HTML,使其显示为HTML
{this.state.myPosts[posts[i][“body”]}
//我尝试了以下操作,但得到了一个“非字符串”控制台。错误或浏览器崩溃
{this.state.myPosts[posts[i][“body”]}
:
无效的
);
});
返回(
{page}
);
}
}
成功导入了标记为JSX的包,使用
标记调用它是使用它的适当方式。问题是它需要一个字符串,当我传递它时,this.state.myPosts[posts[I]][“body”]
它将无法工作。我曾尝试使用toString(
)和JSON.stringify()
将数据转换为字符串,但我无法解决这个问题
如何将JSON标记数据作为字符串从API传递到JSX
换句话说,我认为将
this.state.myPosts[posts[I]][“body”]
转换为字符串应该可以解决这个问题,但我不知道如何解决这个问题。选项1:危险的西汀HTML
如果您想在文章正文中插入HTML,请使用危险的HTML
render: function() {
return (
<div dangerouslySetInnerHTML={{__html: this.state.myPosts[posts[i]]["body"]}></div>
);
}
render:function(){
返回(
);
}
您需要使用危险的LysetinerHTML,因为React会逃逸HTML以防止XSS(一种避免注入恶意代码的安全工具)
- 如果您直接将文章正文转换为字符串,那么您将在正文中添加大量html标记作为字符串,这也是不推荐的李>
- 如果您解析标记并希望转换它,那么这将是一项繁重的任务李>
- 通常,这种做法是API调用不会返回格式化的标记李>
您的结果应该是拥有所有内部组件。通过这种方式,您保留了React的好处,因此从JSON获取标记并显示它并不容易?@NickKinlen检查更新。为您添加了另一个选项,它是一个很好的解析器,用于处理您的情况。