Uncaught ReferenceError: React không được xác định


89

Tôi đang cố gắng làm cho ReactJS hoạt động với đường ray bằng cách sử dụng hướng dẫn này . Tôi nhận được lỗi này:


Uncaught ReferenceError: React is not defined

Nhưng tôi có thể truy cập đối tượng React trong bảng điều khiển trình duyệt, tôi cũng đã thêm public / dist / turbo-react.min.js như được mô tả ở đây và cũng đã thêm dòng trong application.js như được mô tả trong câu trả lời này . Ngoài ra, gây ra lỗi:nhập mô tả hình ảnh ở đây
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

Bất cứ ai có thể gợi ý cho tôi về cách giải quyết điều này?

[EDIT 1]
Mã nguồn để tham khảo:
Đây là comments.js.jsxtệp của tôi :

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

Và đây là của tôi index.html.erb:

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

Câu trả lời:


91

Tôi có thể tạo lại lỗi này khi tôi đang sử dụng webpack để xây dựng javascript của mình với đoạn mã sau trong của tôi webpack.config.json:

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

Cấu hình trên cho biết webpack không giải quyết require('react')bằng cách tải một mô-đun npm, mà thay vào đó để mong đợi một biến toàn cục (tức là trên windowđối tượng) được gọi React. Giải pháp là xóa phần cấu hình này (vì vậy React sẽ được đóng gói cùng với javascript của bạn) hoặc tải React framework ra bên ngoài trước khi tệp này được thực thi (để tệp window.Reacttồn tại).


4
Xóa cấu hình này đã giải quyết được vấn đề cho tôi.
DJ2

Loại bỏ cấu hình này đã giải quyết được vấn đề đối với tôi quá
coinhndp

50

Tôi gặp lỗi này vì tôi đang sử dụng

import ReactDOM from 'react-dom'

mà không cần nhập phản ứng, sau khi tôi thay đổi nó thành bên dưới:

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

Lỗi đã được giải quyết :)


(cộng 1) - Làm cho cảm giác hoàn hảo
Paul Samsotha

2
Làm! Đó là một chút bất ngờ đến từ một ngôn ngữ như Python. Nếu tôi chỉ sử dụng ReactDOMtrong tệp chính của mình, tôi nghĩ tôi có thể (và nên) loại bỏ tham chiếu tới React. Ồ, đã học được điều gì đó.
jdm

35

Các lý do có thể là 1. bạn không tải React.JS vào trang của mình, 2. bạn tải nó sau đoạn script trên vào trang của mình. Giải pháp là tải tệp JS trước tập lệnh được hiển thị ở trên.

PS

Phương pháp khả thi.

  1. Nếu bạn đề cập reacttrong phần bên ngoài bên trong cấu hình webpack, thì bạn phải tải các tệp phản ứng js trực tiếp vào html của bạn trước khibundle.js
  2. Hãy chắc chắn rằng bạn có dòng import React from 'react';


14

Cố gắng thêm:

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

trước render()hàm.

Điều này đôi khi ngăn chặn lỗi trả về cửa sổ bật lên:

React không được xác định

Thêm Reactvào cửa sổ sẽ giải quyết những vấn đề này.


1
Dòng cuối cùng là phần còn thiếu đối với tôi.
Tasos K.

11

Thêm vào Santosh:

Bạn có thể tải React bằng cách

import React from 'react'

1
@zero_cool Tôi thích dấu chấm phẩy vì nó giúp mã dễ đọc hơn, nhưng chúng là tùy chọn trong JavaScript. Khi bỏ qua, chúng sẽ tự động được chèn vào. Thông số chính thức của EcmaScript có thông tin này: "Hơn nữa, các dấu chấm dứt dòng, mặc dù không được coi là mã thông báo, cũng trở thành một phần của dòng các yếu tố đầu vào và hướng dẫn quá trình tự động chèn dấu chấm phẩy (11.9)." từ: tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars trỏ đến đây: tc39.github.io/ecma262/#sec-automatic-semicolon-insertion Vì vậy, về mặt kỹ thuật, cả hai ví dụ mã của bạn là JS chính xác và hợp lệ.
Clomp

3
import React, { Component, PropTypes } from 'react';

Điều này cũng có thể hoạt động!


3

Tôi gặp lỗi này vì trong mã của mình, tôi viết sai chính tả định nghĩa thành phần bằng chữ thường react.createClassthay vì chữ hoa React.createClass.


1

Tôi đã phải đối mặt với cùng một vấn đề. Tôi đã giải quyết nó bằng cách nhập ReactReactDOMnhư sau:

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


0

Nếu bạn đang sử dụng TypeScript, hãy đảm bảo rằng bạn tsconfig.json"jsx": "react"bên trong "compilerOptions".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.