Uncaught ReferenceError:Reactが定義されていません


94

このチュートリアルを使用して、ReactJSをレールで動作させようとしています。このエラーが発生します:


Uncaught ReferenceError: React is not defined

しかし、私は、ブラウザのコンソールでオブジェクトを反応させるのにアクセスすることができ 、私も追加公開/ DIST /ターボreact.min.js説明したように、ここも追加説明するようにapplication.js内の行を、この答えに運に。さらに、エラーが発生します。ここに画像の説明を入力してください
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

誰かがこれを解決する方法について私に提案できますか?

[編集1]
参照用のソースコード:
これは私のcomments.js.jsxファイルです:

var Comment = React.createClass({
  render: function () {
    return (
      <div className="comment">
        <h2 className="commentAuthor">
          {this.props.author}
        </h2>
          {this.props.comment}
      </div>
      );
  }
});

var ready = function () {
  React.renderComponent(
    <Comment author="Richard" comment="This is a comment "/>,
    document.getElementById('comments')
  );
};

$(document).ready(ready);

そしてこれは私のindex.html.erbです:

<div id="comments"></div>

回答:


92

webpackを使用して、次のチャンクを含むjavascriptをビルドしているときに、このエラーを再現できましたwebpack.config.json

externals: {
    'react': 'React'
},

この上記の構成はrequire('react')、npmモジュールをロードすることによって解決するのではなく、代わりにwindowと呼ばれるグローバル変数(つまりオブジェクト上)を期待するようにwebpackに指示しますReact。解決策は、この構成の一部を削除するか(Reactがjavascriptにバンドルされるようにする)、またはこのファイルが実行される前に(window.React存在するように)Reactフレームワークを外部にロードすることです。


4
この構成を削除すると、問題が解決しました。
DJ2 2018年

この構成を削除すると、私にとっても問題が解決しました
coinhndp 2018年

おかげで、これも私を助けました。
rnd 2010

54

使用していたため、このエラーが発生しました

import ReactDOM from 'react-dom'

reactをインポートせずに、以下に変更すると:

import React from 'react';
import ReactDOM from 'react-dom';

エラーは解決されました:)


(プラス1)-完全に理にかなっています
Paul Samsotha 2017年

2
動作します!これは、Pythonのような言語から来ると少し予想外です。ReactDOMメインファイルでのみ使用している場合は、への参照を削除できる(そして削除する必要がある)と思いましたReact。まあ、何かを学びました。
jdm 2017年


35

考えられる理由は、1。React.JSをページにロードしなかった、2。上記のスクリプトの後にページにロードした。解決策は、上記のスクリプトの前にJSファイルをロードすることです。

PS

可能な解決策。

  1. reactwebpack構成内のexternalsセクションで言及する場合は、前に、reactjsファイルをhtmlに直接ロードする必要があります。bundle.js
  2. あなたがラインを持っていることを確認してください import React from 'react';

15

追加してみてください:

import React from 'react'
import { render } from 'react-dom'
window.React = React

render()関数の前。

これにより、ポップアップエラーが返されるのを防ぐことがあります。

Reactが定義されていません

Reactウィンドウに追加すると、これらの問題が解決されます。


1
最後の行は私にとって欠けていた部分でした。
TasosK.20年

11

Santoshへの追加:

Reactをロードすることができます

import React from 'react'

1
@zero_coolコードが読みやすくなるのでセミコロンが大好きですが、JavaScriptではオプションです。省略すると、自動的に挿入されます。公式のEcmaScript仕様には、次の情報があります。「さらに、行末記号は、トークンとは見なされませんが、入力要素のストリームの一部になり、自動セミコロン挿入(11.9)のプロセスをガイドします。」from:tc39.github.io/ecma262/#sec-lexical-and-regexp-grammarsこれはこれを指します:tc39.github.io/ecma262/#sec-automatic-semicolon-insertion技術的には、両方のコード例は次のとおりです。正しく有効なJS。
2016


3

コードreact.createClassで大文字ではなく小文字でコンポーネント定義のスペルを間違えたため、このエラーが発生しましたReact.createClass


1

私は同じ問題に直面していました。私はインポートして、それを解決Reactし、ReactDOM以下のようにのように:

import React from 'react';
import ReactDOM from 'react-dom';

1

BabelとReact17を使用している場合は、configに「runtime2: "automatic」を追加する必要があるかもしれません。

 {
     "presets": ["@babel/preset-env", ["@babel/preset-react", {
        "runtime": "automatic"
     }]]
 }


0

TypeScriptを使用している場合tsconfig.jsonは、"jsx": "react"内にあることを確認してください"compilerOptions"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.