JSX'te foreach tepki verin


109

REACT yoluyla çıktısını almak istediğim bir nesne var

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

ve benim tepki bileşenim (azaltma), başka bir bileşen

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;

Yukarıdaki kod parçacığından da görebileceğiniz gibi, yanıtlar dizisini props içinde kullanarak yanıt bileşeninin bir dizisini eklemeye çalışıyorum.

Yanıtlar:


213

Bir eleman dizisine geçmeniz gerekiyor jsx. Sorun şu ki forEach, hiçbir şey döndürmez (yani geri döner undefined). Böyle mapbir dizi döndürdüğü için daha iyi kullanın

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 anahtarını kullanmak, sanal dom için bazı durumlarda iyi bir seçim değildir.
maquannene

3
@maquannene Gerçekten bunu işaret ettiğiniz için teşekkürler. İşte neden medium.com/@robinpokorny/…
cyberwombat

1
FWIW ayrıca diğer koleksiyon türlerine de geçebilirsiniz. Birlikte çalışabilmeleri için yalnızca kayıtlarını açmanız gerekir .map(). örneğin Object.keys(collection).map(key => ...ve rahatça çalışmak için bir değişken atayıncollection[key]
John Kaster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.