2015-09-19 2 views
5

В соответствии с react docs, если компонент имеет несколько дочерних элементов, this.props.children должен быть массивом.React props.children не является массивом

Я следующий компонент:

export class Two extends React.Component { 

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

    render() { 

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

}; 

Что я прохожу детей в метод другого компонента визуализации():

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

Почему this.props.children не массив? Что еще более важно, как я могу заставить его быть одним?

+1

Также в соответствии с [документы] (https://facebook.github.io/react/docs/top-level -api.html # react.children), дети - непрозрачная структура данных. –

+2

Что вам нужно делать с 'this.props.children'? Если вы хотите итерировать всех детей, чем у вас есть инструменты, например, в [React Children utilities] (https://facebook.github.io/react/docs/top-level-api.html#react.children). –

+0

Это потому, что Img капитализируется? –

ответ

10

Нашел лучшее решение для этого после некоторого рытья в React.Children source. Похоже, в React 0.14 был добавлен метод .toArray(), который вскоре будет выпущен.

После того, как он выходит, мы сможем просто сделать что-то вроде этого:

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

Там на самом деле весь API для работы с props.children : https://facebook.github.io/react/docs/react-api.html#react.children. сами реквизиты считаются «непрозрачными», и никаких предположений о его реализации не следует делать - см. https://github.com/facebook/react/issues/751. – Tomty

Смежные вопросы