JSX에서 foreach 반응


111

REACT를 통해 출력하려는 ​​개체가 있습니다.

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

내 반응 구성 요소 (줄임)는 또 다른 구성 요소입니다.

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로 출력되지는 않습니다.

답변:


218

요소 배열을에 전달해야합니다 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;

7
var i를 키로 사용하는 것은 가상 DOM의 일부 상황에서 좋은 선택이 아닙니다.
maquannene

3
@maquannene 지적 해 주셔서 감사합니다. 왜 medium.com/@robinpokorny/…
cyberwombat

1
FWIW는 다른 종류의 컬렉션을 전달할 수도 있습니다. .NET과 함께 작동하도록 펼치기 만하면됩니다 .map(). 예를 들어 Object.keys(collection).map(key => ...편리하게 작업 할 수 있도록 변수 할당collection[key]
John Kaster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.