2015-09-19 6 views
5

In base allo react docs, se un componente ha più figli, questo.proprio.children dovrebbe essere un array.Oggetti di reazione.children non è array

ho le seguenti componenti:

export class Two extends React.Component { 

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

    render() { 

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

}; 

Quale passo i bambini al metodo render() di un altro componente:

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

Perché this.props.children non è un array? Ancora più importante, come posso averne uno?

+1

secondo anche al [documenti] (https://facebook.github.io/react/docs/top-level -api.html # react.children), i bambini sono una struttura di dati opaca. –

+2

Cosa devi fare con 'this.props.children'? Se vuoi iterare tutti i bambini di quanti hai strumenti come in [Utilità React Children] (https://facebook.github.io/react/docs/top-level-api.html#react.children). –

+0

Forse perché Img è in maiuscolo? –

risposta

10

Trovato una soluzione migliore a questo dopo alcuni scavi nel React.Children source. Sembra che sia stato aggiunto un metodo .toArray() in React 0.14, che sarà presto rilasciato.

Una volta che è fuori saremo in grado di fare semplicemente qualcosa di simile:

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

In realtà c'è un intero API per lavorare con props.children : https://facebook.github.io/react/docs/react-api.html#react.children. props.children è considerato "opaco" e non si dovrebbero formulare ipotesi sulla sua implementazione - vedi https://github.com/facebook/react/issues/751. – Tomty