जेएसएक्स में रिएक्ट फॉरच


109

मेरे पास एक ऐसी वस्तु है जिसे मैं 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 में आउटपुट नहीं होता है।

जवाबों:


213

आपको तत्व की एक सरणी पास करनी होगी 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 का उपयोग करना अच्छा विकल्प नहीं है।
मैक्वेनेने

3
@maquannene वास्तव में यह इंगित करने के लिए धन्यवाद। यहाँ क्यों पर एक अच्छी पोस्ट है medium.com/@robinpokorny/...
cyberwombat

1
FWIW आप अन्य प्रकार के संग्रह में भी पास कर सकते हैं। आपको बस उन्हें अनियंत्रित करने की आवश्यकता है ताकि वे साथ काम करें .map()। उदाहरण के लिए Object.keys(collection).map(key => ...और आसानी से काम करने के लिए एक चर असाइन करेंcollection[key]
John Kaster
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.