Reactjs 如何将HTML存储为处于react状态的对象属性的值?
我的常见问题解答组件中有以下状态:Reactjs 如何将HTML存储为处于react状态的对象属性的值?,reactjs,javascript-objects,Reactjs,Javascript Objects,我的常见问题解答组件中有以下状态: this.state = { faqs: [ { question: "Some question string", answer: "Some answer string" }, { question: "Some que
this.state = {
faqs: [
{
question: "Some question string",
answer: "Some answer string"
},
{
question: "Some question string",
answer: "Some answer string"
}
]
};
我在渲染方法中循环到它以显示每个FAQ集。但是,我的“answer”属性需要包含标签,如下所示:
{
question: "Some question string",
answer: "<p>Some answer string</p> <p>Some answer string</p>"
}
{
问题:“一些问题串”,
答案:一些答案字符串一些答案字符串“
}
如何在react中实现这一点?如果我正确理解了您的情况,react的内置
危险的SetinerHTML
道具可能就是这种情况
dangerlySetinerHTML
prop提供了一种通过字符串值而不是通过JSX指定元素html内容的机制
要说明此概念,请参见以下代码:
// I am assuming that your render function looks something like this:
function render() {
const faqs = this.state.faqs
return (<div>
faqs.map(faq => {
return (<div>
<h3> {{ faq.question }}</h3>
{/* make use of dangerouslySetInnerHTML in this way to
account for HTML tags/markup in the answer variable */}
<div dangerouslySetInnerHTML={{ _html : faq.answer }}></div>
</div>)
})
</div>)
}
//我假设您的渲染函数如下所示:
函数render(){
const faqs=this.state.faqs
返回(
地图(faq=>{
返回(
{{faq.question}
{/*以这种方式使用危险的LysetinerHTML
应答变量*/}中HTML标记/标记的帐户
)
})
)
}
如果我正确理解您的情况,这可能是react内置的危险西汀HTML
道具的情况
dangerlySetinerHTML
prop提供了一种通过字符串值而不是通过JSX指定元素html内容的机制
要说明此概念,请参见以下代码:
// I am assuming that your render function looks something like this:
function render() {
const faqs = this.state.faqs
return (<div>
faqs.map(faq => {
return (<div>
<h3> {{ faq.question }}</h3>
{/* make use of dangerouslySetInnerHTML in this way to
account for HTML tags/markup in the answer variable */}
<div dangerouslySetInnerHTML={{ _html : faq.answer }}></div>
</div>)
})
</div>)
}
//我假设您的渲染函数如下所示:
函数render(){
const faqs=this.state.faqs
返回(
地图(faq=>{
返回(
{{faq.question}
{/*以这种方式使用危险的LysetinerHTML
应答变量*/}中HTML标记/标记的帐户
)
})
)
}
只需用片段将其包装起来即可
{
question: "Some question string",
answer: <><p>Some answer string</p> <p>Some answer string</p></>
}
{
问题:“一些问题串”,
答案:一些答案字符串一些答案字符串
}
还是用这个
{
question: "Some question string",
answer: <React.Fragment><p>Some answer string</p> <p>Some answer string</p></React.Fragment>
}
{
问题:“一些问题串”,
答案:一些答案字符串一些答案字符串
}
只需用片段将其包装起来即可
{
question: "Some question string",
answer: <><p>Some answer string</p> <p>Some answer string</p></>
}
{
问题:“一些问题串”,
答案:一些答案字符串一些答案字符串
}
还是用这个
{
question: "Some question string",
answer: <React.Fragment><p>Some answer string</p> <p>Some answer string</p></React.Fragment>
}
{
问题:“一些问题串”,
答案:一些答案字符串一些答案字符串
}
为什么要在渲染中列出两次id“some answer string”?在React中执行此操作的正确方法是创建一个小型SFC组件,该组件使用单个propanswer
并返回包装在p
标记中的HTML。然后在组件的render
方法中,在FAQ
数组上循环,并调用此Answer
组件,从对象传递Answer
。@ChrisCousins我只是给出一个示例文本。实际文本不同。不,这不是我的问题-您显然有“一些答案字符串”一些答案字符串”-为什么您重复了来自两个不同faq条目的答案?为什么id为“一些答案字符串”在渲染中列出两次?在React中执行此操作的正确方法是创建一个小型SFC组件,该组件采用单个propanswer
,并返回包装在p
标记中的HTML。然后在组件的render
方法中,在FAQ
数组上循环,并调用此Answer
组件,从对象传递Answer
。@ChrisCousins我只是给出一个示例文本。实际文本不同。不,这不是我的问题-你显然有“一些答案字符串”一些答案字符串”-你为什么重复来自两个不同faq条目的答案?这是唯一的方法吗?这个名字听起来很危险@DacreDennyYes,这意味着你的应用程序的用户容易受到XSS攻击,因此,如果可能,最好避免这是唯一的方法吗?这个名字听起来很危险@DacreDennyYes,这意味着你的应用程序的用户容易受到XSS攻击,所以如果可能的话最好避免