React JSX file giving error "Cannot read property 'createElement' of undefined"

JavascriptReactjsNpmReact Jsx

Javascript Problem Overview


I have a file test_stuff.js that I am running with npm test

It pretty much looks like this:

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));
    });
  });
});

Unfortunately, I get the error

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

What does that mean? I am importing React from 'react' successfully, so why would React be undefined? It is _react.React, whatever that means...

Javascript Solutions


Solution 1 - Javascript

To import React do import React from 'react' You add brackets when the thing you are importing is not the default export in that module or file. In case of react, it's the default export.

This might apply to your other imports depending on how you defined them.

Solution 2 - Javascript

import React, { Component } from 'react'

This worked for me. I'm not sure why it fixed my version of this issue, though. So if you are someone who stumbled upon this problem and you use create-react-app as your starting boilerplate, this way of importing React will do the trick. (as of Oct '18, lol)

Solution 3 - Javascript

For those who are working ReactJS with TypeScript.

import * as React from 'react';

Solution 4 - Javascript

This error occured to me due to carelessness. It's actually

import React from 'react';

Brackets are for named exports such as this:

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

Solution 5 - Javascript

Trying to use destructor for importing the React object may cause you problems like this import {React} from 'react';. This might be the cause of the error 90% of the time running this code above.

rather use: import React from 'react';

And then you can access any member of the React class via: React.

Solution 6 - Javascript

Change: import { React } from 'react' to import React from 'react' Because React is a default export and you don’t need curly braces for any default exports.

Solution 7 - Javascript

If in case you need to import multiple classes from 'react', you can have an alias for them except React. Something like,

import React, * as react from 'react';

Solution 8 - Javascript

React is exported by default in that module, no need {}.

Solution 9 - Javascript

This issue occurred while importing React from react, I placed it inside curly brackets.

Please do this:

import React, {useState} from "react";

Instead of:

import {React, useState} from "react";

Solution 10 - Javascript

This error can be occured due to carelessness. Please add

import React from 'react'

It will be resolved after that

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSome GuyView Question on Stackoverflow
Solution 1 - JavascriptKafoView Answer on Stackoverflow
Solution 2 - JavascriptTJ AllenView Answer on Stackoverflow
Solution 3 - JavascriptKhuongView Answer on Stackoverflow
Solution 4 - JavascriptVimal Kurien SamView Answer on Stackoverflow
Solution 5 - JavascriptBobView Answer on Stackoverflow
Solution 6 - JavascriptSaran M SView Answer on Stackoverflow
Solution 7 - JavascriptSasi Kumar MView Answer on Stackoverflow
Solution 8 - JavascriptAggestorView Answer on Stackoverflow
Solution 9 - JavascriptAnita JayanaView Answer on Stackoverflow
Solution 10 - JavascriptnikitabarnawalView Answer on Stackoverflow