Uncaught ReferenceError: ไม่ได้กำหนดปฏิกิริยา


94

ฉันพยายามที่จะทำให้การทำงานของ ReactJS กับรางใช้นี้กวดวิชา ฉันได้รับข้อผิดพลาดนี้:


Uncaught ReferenceError: React is not defined

แต่ฉันสามารถเข้าถึงวัตถุ React ในคอนโซลของเบราว์เซอร์ได้ ฉันยังเพิ่มpublic / dist / turbo-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 เพื่อสร้างจาวาสคริปต์ของฉันโดยมีส่วนต่อไปนี้ในwebpack.config.json:

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

นี้ค่าข้างต้นบอก webpack จะไม่สามารถแก้ไขrequire('react')ได้โดยการโหลดโมดูล NPM แต่จะคาดหวังว่าตัวแปรทั่วโลก (เช่นบนwindowวัตถุ) Reactที่เรียกว่า วิธีแก้ปัญหาคือลบส่วนกำหนดค่านี้ออก (ดังนั้น React จะรวมกับจาวาสคริปต์ของคุณ) หรือโหลดเฟรมเวิร์ก React จากภายนอกก่อนที่ไฟล์นี้จะถูกเรียกใช้งาน (เพื่อให้window.Reactมีอยู่)


4
การลบการกำหนดค่านี้ช่วยแก้ปัญหาให้ฉันได้
DJ2

การลบการกำหนดค่านี้ช่วยแก้ปัญหาให้ฉันได้เช่นกัน
coinhndp

ขอบคุณสิ่งนี้ช่วยฉันด้วย
rnd

54

ฉันได้รับข้อผิดพลาดนี้เนื่องจากฉันใช้ไฟล์

import ReactDOM from 'react-dom'

โดยไม่ต้องนำเข้าการตอบสนองเมื่อฉันเปลี่ยนเป็นด้านล่าง:

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

แก้ไขข้อผิดพลาดแล้ว :)


(บวก 1) - ทำให้รู้สึกสมบูรณ์แบบ
Paul 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';

15

ลองเพิ่ม:

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

ก่อนrender()ฟังก์ชัน

บางครั้งสิ่งนี้จะป้องกันข้อผิดพลาดในการส่งคืนป๊อปอัป:

ไม่ได้กำหนดปฏิกิริยา

การเพิ่มReactลงในหน้าต่างจะช่วยแก้ปัญหาเหล่านี้ได้


1
บรรทัดสุดท้ายคือส่วนที่ขาดหายไปสำหรับฉัน
Tasos K.

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 ที่ถูกต้องและถูกต้อง
Clomp


3

ผมได้รับข้อผิดพลาดนี้เพราะในรหัสของฉันฉันสะกดคำนิยามองค์ประกอบด้วยตัวพิมพ์เล็กแทนตัวพิมพ์ใหญ่react.createClassReact.createClass


1

ฉันประสบปัญหาเดียวกัน ฉันแก้ไขโดยการนำเข้าReactและReactDOMชอบดังนี้:

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

1

หากคุณใช้ Babel และ React 17 คุณอาจต้องเพิ่ม "runtime2:" automatic "ใน config

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

0

ข้อผิดพลาดที่แสดง

หลังจากการนำเข้านั้นตอบสนอง

สุดท้ายนำเข้า react-dom

หากข้อผิดพลาดคือการตอบสนองไม่ได้กำหนดโปรดเพิ่ม ==>import React from 'react';

หากข้อผิดพลาดคือ reactDOM ไม่ได้กำหนดโปรดเพิ่ม ==>import ReactDOM from 'react-dom';


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.