reactjs - 警告 : React. createElement:类型不应为 null 或未定义

标签 reactjs

期望以下代码附加无序列表及其子列表 <"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 版本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);

它是什么类型?必须在哪里声明指定的类型?我猜想这个概念在某个地方完全被误解了,但是在哪里呢?

最佳答案

警告来自

var ItemDelegate = React.createFactory(ListViewChildren);

ListViewChildren 定义如下,因此 React 无法创建工厂。

只需将 var ListViewChildren = ... 移至上方,警告就会消失。

您在 ListView 类中也遇到了一个问题:您的 items 应该是子项而不是 props:

// 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/

关于reactjs - 警告 : React. createElement:类型不应为 null 或未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29265086/

相关文章:

scala - 使用scalajs-react在音频元素的间隔上循环播放

javascript - 样式化组件 - 具有相同样式的两个不同元素

javascript - 如何在 ReactJs 中获取标签属性值?

javascript - 将 HTML 插入用户字符串并在 React 中渲染(并避免 XSS 威胁)

reactjs - 对于连接的组件, enzyme wrapper.instance()为空

javascript - 如何更新故事书中的组件 Prop

javascript - 使用逻辑运算符有条件地启用/禁用按钮元素

javascript - 如何过滤 Mongoose 中的日期事件?

javascript - 如何动态决定是否将 Prop 传递给 react 组件?

reactjs - Jestjs - FluentUI - 抑制 "The icon ' X' 被使用但未注册”警告