React.createElement:类型不应为空

Posted

技术标签:

【中文标题】React.createElement:类型不应为空【英文标题】:React.createElement: type should not be null 【发布时间】:2017-03-03 17:05:23 【问题描述】:

首先,我希望这不是重复的 - 我使用的是 ES6,而不是常规的 extends React.Component

这是我的Layout 组件。我将这个实现到app.jsimport Layout from './components/Layout'; 并且控制台抛出错误:

React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components). Check the render method of "Layout".

const Layout = (props) => 

    let  location  = props;

    return (
        <div>
            <Nav location=location />
            <main>
            </main>
        </div>
    );
;

export default Layout;

怎么了?这是 React/Redux 环境。

【问题讨论】:

你应该检查导入 为什么,有什么问题? 如果main 是组件,它应该以大写字母开头。签入控制台Nav,它不应该是未定义的 这个警告意味着在import Layout from './components/Layout' 期间出现问题并且布局变量为空:) 你能显示你的app.js,目录结构吗?你还在用 webpack 什么的吗? 我正在使用 webpack 【参考方案1】:

您的export 声明可能是错误的,如docs 所示:

请注意,导出默认值不能使用 var、let 或 const。

尝试改变

export default Layout;

export  Layout as default ;

【讨论】:

对不起,不是这个,还有这个问题:( 嗯,你添加了'import React from 'react';'在布局的开头? 我找到了问题,&lt;Nav location=location /&gt; 的实现有问题,但是为什么?像这样实现 - import Nav from 'layout/Nav';【参考方案2】:

错误提示Check the render method of "Layout".

这是一个很好的提示,错误不是来自app.js,而是来自您的Layout 组件。很可能这就是您导入Nav 的方式。如果您的导入语句如下所示:

import Nav from "/path/to/Nav";

尝试将其更改为:

import Nav from "/path/to/Nav";


进一步说明:使用default 导出可让您在导入时省略大括号。

// if Nav component export looks like this:
export default Nav;
// OR
export  Nav as default ;
// import it as such:
import Nav from "/path/to/Nav";

// if Nav component export looks like this:
module.exports =  Nav ;
// import it as such:
import  Nav  from "/path/to/Nav";

如果您使用了错误的导入方法,则可能会出现错误React.createElement: type should not be null[...](取决于模块是否使用default 导出)。

【讨论】:

以上是关于React.createElement:类型不应为空的主要内容,如果未能解决你的问题,请参考以下文章

React.createElement:类型无效——需要一个字符串(对于内置组件)或一个类/函数

在 React JS 中的组件之间切换

React.createElement:类型无效(地图)

React.createElement:类型无效

反应热加载器 3

ReactJS/Javascript:React.createElement 期望字符串但传递了对象