2016-08-20 1 views
5

Если я понимаю РЕАКТ children подпорку правильно:одного ребенка и «onlyChild должны быть миновал детей только с одним ребенком»

  • children обычно представляет собой массив, но если есть только один ребенок, это дает, что одного ребенка , (source)
  • children «непрозрачный», поэтому код приложения, по-видимому, не должен полагаться на это. (source)
  • React.children.count1 если есть только один ребенок.
  • React.children.only должен быть единственным ребенком.

Исходя из этого, я хотел бы ожидать следующий код для работы:

const Sample = ({children, ...props}) => { 
    if (React.Children.count(children) === 1) { 
    doSomethingWith(React.Children.only(children)); 
    } 

    // etc. 
}; 

<Sample>Hello, world!<Sample>; 

Вместо этого, он выдает следующее сообщение об ошибке:

onlyChild must be passed a children with exactly one child

Почему?

ответ

6

Проблема заключается в том, что React.Children.only ожидает, что единственным дочерним элементом является действительный элемент React , а не строка или номер рендеринга.

Я действительно не понимаю обоснование или прецедент для этого, но React 15.3.1 не менее improves the error message («React.Children.only ожидается получение одного дочернего элемента React)».

React issue #1104 обсуждает это далее.

Решение, по-видимому, чтобы игнорировать React.Children.only и идти вперед и получить доступ к единому children элемента непосредственно:

if (React.Children.count(children) === 1) { 
    doSomethingWith(children); 
    } 
+0

Perfect. Благодарю. Это определенно не ясно из документов. –

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