在JSX中反应foreach


107

我有一个要通过REACT输出的对象

question = {
    text: "Is this a good question?",
    answers: [
       "Yes",
       "No",
       "I don't know"
    ]
} 

而我的react组件(已减少)是另一个组件

class QuestionSet extends Component {
render(){ 
    <div className="container">
       <h1>{this.props.question.text}</h1>
       {this.props.question.answers.forEach(answer => {     
           console.log("Entered");  //This does ifre                       
           <Answer answer={answer} />   //THIS DOES NOT WORK 
        })}
}

export default QuestionSet;

从上面的代码片段中可以看到,我正在尝试通过在props中使用数组Answers来插入组件Answer的数组,它确实有效,但不会输出到HTML中。

Answers:


210

您需要将元素数组传递给jsx。问题是forEach什么都不返回(即返回undefined)。更好地使用map它,因为它返回这样的数组

class QuestionSet extends Component {
render(){ 
    <div className="container">
       <h1>{this.props.question.text}</h1>
       {this.props.question.answers.map((answer, i) => {     
           console.log("Entered");                 
           // Return the element. Also pass key     
           return (<Answer key={i} answer={answer} />) 
        })}
}

export default QuestionSet;

6
在某些情况下,对于虚拟dom,使用var i作为密钥不是一个好的选择。
maquannene

2
@maquannene确实感谢您指出这一点。下面是为什么好的帖子medium.com/@robinpokorny/...
cyberwombat

FWIW您也可以传递其他种类的收藏。您只需要展开它们,它们便可以使用.map()。例如,Object.keys(collection).map(key => ...并分配一个变量以方便使用collection[key]
John Kaster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.