React foreach trong JSX


109

Tôi có một đối tượng mà tôi muốn xuất qua REACT

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

và thành phần phản ứng của tôi (bị cắt giảm), là một thành phần khác

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;

như bạn có thể thấy từ đoạn trích ở trên, tôi đang cố gắng chèn một mảng của thành phần Câu trả lời bằng cách sử dụng mảng Câu trả lời trong đạo cụ, nó sẽ hiển thị nhưng không được xuất thành HTML.

Câu trả lời:


213

Bạn cần chuyển một mảng phần tử tới jsx. Vấn đề là forEachkhông trả về bất cứ thứ gì (tức là nó trả về undefined). Vì vậy, sử dụng tốt hơn mapvì nó trả về một mảng như thế này

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
Sử dụng var i làm khóa không phải là một lựa chọn tốt trong một số tình huống đối với dom ảo.
maquannene

3
@maquannene Thật vậy, cảm ơn bạn đã chỉ ra điều đó. Đây là một bài đăng hay về lý do tại sao medium.com/@robinpokorny/…
cyberwombat

1
FWIW bạn cũng có thể chuyển vào các loại bộ sưu tập khác. Bạn chỉ cần bỏ cuộn chúng để chúng hoạt động với .map(). ví dụ Object.keys(collection).map(key => ...và gán một biến để thuận tiện làm việc vớicollection[key]
John Kaster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.