未捕获ReferenceError:未定义React


89

我正在尝试使用教程使ReactJS与rails一起使用。我收到此错误:


Uncaught ReferenceError: React is not defined

但我可以访问浏览器控制台中的物体做出反应 我还添加了公共/距离/涡轮react.min.js描述这里,也加入如描述的application.js线在这个答案没有运气。此外,给出错误:在此处输入图片说明
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

谁能建议我解决这个问题?

[EDIT 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>

Answers:


91

当我使用webpack使用以下代码块构建javascript时,能够重现此错误webpack.config.json

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

上面的配置告诉webpack不要require('react')通过加载npm模块来解析,而是期望一个名为的全局变量(即在window对象上)React。解决方案是删除此配置(以便React将与您的javascript捆绑在一起)或在执行此文件之前外部加载React框架(这样就window.React存在)。


4
删除此配置为我解决了问题。
DJ2

删除此配置也为我解决了问题
coinhndp 18-10-27

50

我收到此错误是因为我正在使用

import ReactDOM from 'react-dom'

不导入反应,将其更改为以下内容:

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

错误已解决:)


(加1) -非常有意义
保罗Samsotha

2
作品!来自Python之类的语言有点意外。如果仅ReactDOM在主文件中使用,我以为我可以(并且应该)摆脱对的引用React。哦,知道了。
jdm

35

可能的原因是:1.您没有将React.JS加载到页面中; 2.在上述脚本之后将其加载到页面中。解决方案是在上述脚本之前加载JS文件。

聚苯乙烯

可能的解决方案。

  1. 如果您react在webpack配置中的“外部”部分中提及,则必须先将react js文件直接加载到html中,bundle.js
  2. 确保你有线 import React from 'react';


14

尝试添加:

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

render()功能之前。

有时这可以防止弹出错误返回:

未定义React

添加React到窗口将解决这些问题。


1
最后一行是我缺少的部分。
Tasos K.

11

添加到Santosh:

您可以通过以下方式加载React

import React from 'react'

1
@zero_cool我喜欢分号,因为它使代码更易于阅读,但是它们在JavaScript中是可选的。如果省略,它们将被自动插入。正式的EcmaScript规范具有以下信息:“此外,行终止符尽管不被视为标记,但也成为输入元素流的一部分,并指导自动分号插入过程(11.9)。” 来自:tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars指向此:tc39.github.io/ecma262/#sec-automatic-semicolon-insertion从技术上讲,这两个代码示例都是正确有效的JS。
Clomp '16


3

我收到此错误的原因是,在我的代码中,我用小写字母react.createClass而不是大写字母拼写了错误的组件定义React.createClass


1

我面临着同样的问题。我解决它通过导入ReactReactDOM类似如下:

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


0

如果您使用的是TypeScript,请确保您tsconfig.json在的"jsx": "react"范围内"compilerOptions"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.