2015-09-19 17 views
5

Theo react docs, nếu một thành phần có nhiều trẻ em, this.props.children phải là một mảng.Phản ứng đạo cụ.children không phải là mảng

Tôi đã thành phần sau đây:

export class Two extends React.Component { 

    componentDidMount() { 
     console.log(Array.isArray(this.props.children)); // false 
    } 

    render() { 

     return(
      <div> 
       {this.props.children} 
      </div> 
     ); 
    } 

}; 

nào tôi vượt qua con để trong phương pháp của thành phần khác render():

<Two> 
    <Img src="/photos/tomato.jpg"/> 
    <Img src="/photos/tomato.jpg"/> 
</Two> 

Tại sao this.props.children không phải là một mảng? Quan trọng hơn, làm thế nào tôi có thể làm cho nó trở thành một?

+1

Cũng theo [tài liệu] (https://facebook.github.io/react/docs/top-level -api.html # react.children), trẻ em là một cấu trúc dữ liệu mờ đục. –

+2

Bạn cần làm gì với 'this.props.children'? Nếu bạn muốn lặp lại tất cả trẻ em hơn là bạn có các công cụ như trong [React Children utilities] (https://facebook.github.io/react/docs/top-level-api.html#react.children). –

+0

Có phải vì Img được viết hoa không? –

Trả lời

10

Tìm thấy giải pháp tốt hơn cho vấn đề này sau khi đào một số trong số React.Children source. Có vẻ như phương thức .toArray() đã được thêm vào trong React 0.14, sắp được phát hành.

Khi nó được ra khỏi chúng ta sẽ có thể chỉ cần làm một cái gì đó như thế này:

let children = React.Children.toArray(this.props.children); 
+1

Có thực sự toàn bộ một API để làm việc với props.children : https://facebook.github.io/react/docs/react-api.html#react.children. props.children chính nó được coi là "mờ đục" và không có giả định nên được thực hiện về việc thực hiện của nó - xem https://github.com/facebook/react/issues/751. – Tomty

Các vấn đề liên quan