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组件,该组件使用单个prop
answer
并返回包装在
p
标记中的HTML。然后在组件的
render
方法中,在
FAQ
数组上循环,并调用此
Answer
组件,从对象传递
Answer
。@ChrisCousins我只是给出一个示例文本。实际文本不同。不,这不是我的问题-您显然有“一些答案字符串”

一些答案字符串”

-为什么您重复了来自两个不同faq条目的答案?为什么id为“一些答案字符串”在渲染中列出两次?在React中执行此操作的正确方法是创建一个小型SFC组件,该组件采用单个prop
answer
,并返回包装在
p
标记中的HTML。然后在组件的
render
方法中,在
FAQ
数组上循环,并调用此
Answer
组件,从对象传递
Answer
。@ChrisCousins我只是给出一个示例文本。实际文本不同。不,这不是我的问题-你显然有“一些答案字符串”一些答案字符串”

-你为什么重复来自两个不同faq条目的答案?这是唯一的方法吗?这个名字听起来很危险@DacreDennyYes,这意味着你的应用程序的用户容易受到XSS攻击,因此,如果可能,最好避免这是唯一的方法吗?这个名字听起来很危险@DacreDennyYes,这意味着你的应用程序的用户容易受到XSS攻击,所以如果可能的话最好避免