反应JSX文件给出错误"无法读取属性' createElement'未定义"

时间:2016-09-10 05:54:15

标签: javascript reactjs npm react-jsx

我有一个与npm test

一起运行的文件test_stuff.js

它看起来像这样:

import { assert } from 'assert';
import { MyProvider } from '../src/index';
import { React } from 'react';

const myProvider = (
  <MyProvider>
  </MyProvider>
);

describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      assert.equal(-1, [1,2,3].indexOf(4));
    });
  });
});

不幸的是,我收到了错误

/Users/me/projects/myproj/test/test_stuff.js:11
var myProvider = _react.React.createElement(_index.MyProvider, null);
                             ^

TypeError: Cannot read property 'createElement' of undefined
    at Object.<anonymous> (/Users/me/projects/myproj/test/test_stuff.js:7:7)

这是什么意思?我正在从&#39;反应&#39;导入React。成功了,为什么React会被定义?它是_react.React,无论那意味着什么......

8 个答案:

答案 0 :(得分:109)

要导入React do import React from 'react'如果要导入的内容不是该模块或文件中的默认导出,则添加括号。如果有反应,它是默认导出。

这可能适用于您的其他导入,具体取决于您的定义方式。

答案 1 :(得分:10)

import React, { Component } from 'react'

这对我有用。不过,我不确定为什么它可以解决此问题。因此,如果您是偶然发现此问题的人,并且使用create-react-app作为您的开始样板,那么这种导入React的方法将可以解决问题。 (截至18年10月,哈哈)

答案 2 :(得分:3)

由于粗心,此错误发生在我身上。其实是

import React from 'react';

括号用于这样的命名出口:

import React, { useState, useEffect } from 'react';

答案 3 :(得分:2)

对于那些使用TypeScript使用ReactJS的人。

import * as React from 'react';

答案 4 :(得分:0)

更改: 从“反应”导入{React} 从“反应”导入React 由于React是默认导出,因此您不需要大括号即可进行默认导出。

答案 5 :(得分:0)

如果您需要从“反应”中导入多个类,则可以使用它们的别名(React除外)。像

import React, * as react from 'react';

答案 6 :(得分:0)

React默认情况下在该模块中导出,不需要{}。

答案 7 :(得分:0)

尝试使用析构函数导入 React 对象可能会导致您出现类似 import {React} from 'react'; 的问题。 这可能是上面运行此代码 90% 的错误的原因。

而是使用: import React from 'react';

然后你可以通过以下方式访问 React 类的任何成员: 做出反应。