Javascript React JSX文件给出错误“;无法读取属性';createElement';“未定义”的定义;
我有一个test_stuff.js文件,我正在使用它运行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(
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如果你有新问题,请点击按钮提问。如果此问题有助于提供上下文,请包含指向此问题的链接-