Javascript React JSX文件给出错误“;无法读取属性';createElement';“未定义”的定义;

Javascript React JSX文件给出错误“;无法读取属性';createElement';“未定义”的定义;,javascript,reactjs,npm,react-jsx,Javascript,Reactjs,Npm,React Jsx,我有一个test_stuff.js文件,我正在使用它运行npm test 它看起来就像这样: import { assert } from 'assert'; import { MyProvider } from '../src/index'; import { React } from 'react'; const myProvider = ( <MyProvider> </MyProvider> ); describe('Array', function(

我有一个test_stuff.js文件,我正在使用它运行
npm test

它看起来就像这样:

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));
    });
  });
});
从“assert”导入{assert};
从“../src/index”导入{MyProvider};
从“React”导入{React};
常量myProvider=(
);
描述('Array',function()){
描述(“#indexOf()”,函数(){
它('当值不存在时应返回-1',函数(){
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)
/Users/me/projects/myproj/test/test\u stuff.js:11
var myProvider=\u react.react.createElement(\u index.myProvider,null);
^
TypeError:无法读取未定义的属性“createElement”
反对。(/Users/me/projects/myproj/test/test_stuff.js:7:7)

这是什么意思?我正在成功地从“React”导入React,那么为什么React是未定义的呢?它是_react.react,不管这意味着什么…

导入react do
从“react”导入react
当您导入的内容不是该模块或文件中的默认导出时,您会添加括号。在react的情况下,它是默认的导出

这可能适用于其他导入,具体取决于您如何定义它们

import React, { Component } from 'react'

这对我有用。不过,我不知道为什么它会修正我对这个问题的看法。因此,如果您是偶然发现这个问题的人,并且您使用CreateReact应用程序作为起始样板文件,那么这种导入react的方法就可以了。(截至10月18日,lol)

适用于那些正在使用TypeScript的人

import * as React from 'react';
更改: 从'React'导入{React}从'React'导入React
因为React是一个默认导出,任何默认导出都不需要花括号。

如果需要从“React”导入多个类,则可以使用除React之外的别名。大概

import React, * as react from 'react';

这个错误是我粗心大意造成的。实际上是

import React from 'react';
括号用于命名导出,例如:

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

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

我还不知道为什么,但对我来说,它是
import*从“React”
作为React from“React”从技术上讲,
import React from“React”
是无效的,因为React不是默认导出,但由于将ES6与babel结合使用,它才起作用。也许您的babel配置不同,迫使您使用正确的有效语法,即
import*as React from'React'
。更多信息:我忘了提到的另一件重要事情是JSX要求React在工作范围内。然而,除了组件和其他命名的导出之外,您实际上不需要React。也许将来您不会导入React。我正在使用React native with expo,我的babel预设为
babel preset expo
如果使用typescript,导入样式也将受到tsconfig中
esModuleInterop
设置的影响。tsconfig必须应用于测试文件(选中
include
files
)。这就是我在尝试导入memo、useffect、useState以及react时遇到的问题。最初看到错误“无法读取未定义的属性‘memo’”,但这修复了它。这也为我修复了它(尽管我导入的是useState而不是组件)。我现在很好奇,我原来的错误的
导入{React,useState}与'React'
有什么不同@JosFabre它出现故障,因为
'react'
没有按照sé将
react
导出为非默认值。但是它
导出useState
导出组件
,等等。这是我的问题。谢谢为什么这是必要的?在运行jest时,我的代码库中到处都是这个错误。有一种方法可以使导入“再次美丽”。在tsconfig.json中添加“esModuleInterop:true”。享受“从“React”导入React”Shulyk Volodymyri如果你有新问题,请点击按钮提问。如果此问题有助于提供上下文,请包含指向此问题的链接-