ตอบสนอง foreach ใน JSX


114

ฉันมีวัตถุที่ต้องการส่งออกทาง 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;

ดังที่คุณเห็นจากตัวอย่างด้านบนฉันกำลังพยายามแทรกอาร์เรย์ขององค์ประกอบคำตอบโดยใช้อาร์เรย์คำตอบในอุปกรณ์ประกอบฉากมันทำมัน แต่ไม่ได้ถูกส่งออกไปใน HTML

คำตอบ:


224

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={answer} answer={answer} />) 
        })}
}

export default QuestionSet;

8
การใช้ var i เป็นคีย์ไม่ใช่ทางเลือกที่ดีในบางสถานการณ์สำหรับ virtual dom
maquannene

4
@maquannene ขอบคุณจริงๆที่ชี้ให้เห็น นี่คือโพสต์ดีๆเกี่ยวกับ why medium.com/@robinpokorny/…
cyberwombat

1
FWIW คุณสามารถส่งผ่านคอลเลกชันประเภทอื่น ๆ ได้ คุณเพียงแค่ต้องยกเลิกการลงทะเบียนจึงจะใช้งาน.map()ได้ เช่นObject.keys(collection).map(key => ...กำหนดตัวแปรเพื่อให้ใช้งานได้สะดวกcollection[key]
John Kaster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.