181 votes

forEach() dans React JSX n'affiche pas de code HTML

J'ai un objet que je veux sortir via React :

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

et mon composant de réaction (coupé), est un autre composant

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;

Comme vous pouvez le voir dans le snippit ci-dessus, j'essaie d'insérer un tableau du composant Answer en utilisant le tableau Answers dans les props, il itère mais n'est pas édité en HTML.

349voto

Prakash Sharma Points 6829

Vous devez passer un tableau d'éléments à jsx . Le problème est que forEach ne retourne rien (c'est-à-dire qu'il retourne undefined ) . Il est donc préférable d'utiliser map parce que map renvoie un tableau :

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;

10 votes

Utiliser var i comme clé n'est pas un bon choix dans certaines situations pour le domaine virtuel.

6 votes

@maquannene En effet, merci de le signaler. Voici un bon article qui explique pourquoi medium.com/@robinpokorny/

4 votes

Pour information, vous pouvez également passer dans d'autres types de collections. Vous devez juste les dérouler pour qu'elles fonctionnent avec .map() . par exemple Object.keys(collection).map(key => ... et assigner une variable pour travailler plus facilement avec collection[key]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X