Предупреждение: React.createElement: тип не должен иметь значение null или undefined
Ожидая, что приведенный ниже код присоединяет неупорядоченный список и его дочерние узлы <"li" />
к document.body, он работает с <"ul" />
, но без каких-либо дочерних элементов и с сообщением об ошибке в консоли:
React.createElement: type should not be null or undefined. It should be a string (for DOM elements) or a ReactClass (for composite components).
(React.js ver.0.13)
var ListView = React.createClass({
render: function() {
var items = this.props.data.map(function(item) {
return ItemDelegate({key:item.id, data:item.id});
}.bind(this));
return (React.createElement('ul', null, items));
}
});
var ItemDelegate = React.createFactory(ListViewChildren);
var ListViewChildren = React.createClass({
render: function(){
return (React.createElement('li', {key: this.props.key, data: this.props.data}));
}
});
var Wrapper = React.createClass({
render: function() {
return (React.createElement(ListView, {data: [/*some data*/]}));
}
});
React.render(React.createElement(Wrapper), document.body);
Что такое тип, и где он должен быть объявлен указанным типом? Я предполагаю, что здесь существует полное непонимание понятия, но где?
Ответы
Ответ 1
Предупреждение происходит от
var ItemDelegate = React.createFactory(ListViewChildren);
ListViewChildren
определяется ниже, поэтому React не может создать factory.
Просто переместите var ListViewChildren = ...
выше, и предупреждение исчезнет.
У вас также есть проблема в классе ListView
: ваш items
должен быть дочерним, а не реквизитом:
// items as props (2nd arg): won't work, html elements don't have props :)
return (React.createElement('ul', items));
// items as children (3rd arg) should work better
return (React.createElement('ul', null, items));
Полный код: http://jsfiddle.net/Lmb7t9pv/2/