ReferenceError Tidak Tertangkap: React tidak ditentukan


94

Saya mencoba membuat ReactJS berfungsi dengan rel menggunakan tutorial ini . Saya mendapatkan kesalahan ini:


Uncaught ReferenceError: React is not defined

Tetapi saya dapat mengakses objek React di konsol browser. Saya juga menambahkan public / dist / turbo-react.min.js seperti yang dijelaskan di sini dan juga menambahkan baris di application.js seperti yang dijelaskan dalam jawaban ini tidak berhasil. Selain itu, berikan kesalahan:masukkan deskripsi gambar di sini
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

Adakah yang bisa menyarankan saya tentang cara menyelesaikan ini?

[EDIT 1]
Kode sumber untuk referensi:
Ini adalah comments.js.jsxfile saya :

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

Dan ini milik saya index.html.erb:

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

Jawaban:


92

Saya dapat mereproduksi kesalahan ini ketika saya menggunakan webpack untuk membangun javascript saya dengan potongan berikut di saya webpack.config.json:

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

Konfigurasi di atas memberi tahu webpack untuk tidak menyelesaikan require('react')dengan memuat modul npm, tetapi mengharapkan variabel global (yaitu pada windowobjek) dipanggil React. Solusinya adalah dengan menghapus konfigurasi ini (sehingga React akan digabungkan dengan javascript Anda) atau memuat kerangka kerja React secara eksternal sebelum file ini dijalankan (jadi itu window.Reactada).


4
Menghapus konfigurasi ini memecahkan masalah bagi saya.
DJ2

Menghapus konfigurasi ini juga memecahkan masalah bagi saya
coinhndp

terima kasih, ini membantu saya juga.
rnd

54

Saya mendapat kesalahan ini karena saya menggunakan

import ReactDOM from 'react-dom'

tanpa mengimpor react, setelah saya mengubahnya menjadi di bawah ini:

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

Kesalahan teratasi :)


(plus 1) - Sangat masuk akal
Paul Samsotha

2
Bekerja! Itu agak tidak terduga datang dari bahasa seperti Python. Jika saya hanya menggunakan ReactDOMdi file utama saya, saya pikir saya bisa (dan harus) menyingkirkan referensi ke React. Baiklah, pelajari sesuatu.
jdm


35

Kemungkinan alasannya adalah 1. Anda tidak memuat React.JS ke halaman Anda, 2. Anda memuatnya setelah skrip di atas ke dalam halaman Anda. Solusi memuat file JS sebelum skrip yang ditunjukkan di atas.

PS

Solusi yang memungkinkan.

  1. Jika Anda menyebutkan reactdi bagian eksternal di dalam konfigurasi webpack, maka Anda harus memuat file react js langsung ke html Anda sebelumnyabundle.js
  2. Pastikan Anda memiliki garis import React from 'react';

15

Coba tambahkan:

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

sebelum render()fungsinya.

Ini terkadang mencegah kesalahan untuk muncul kembali:

React tidak ditentukan

Menambahkan Reactke jendela akan menyelesaikan masalah ini.


1
Baris terakhir adalah bagian yang hilang bagiku.
Tasos K.

11

Menambahkan ke Santosh:

Anda dapat memuat React dengan

import React from 'react'

1
@zero_cool Saya suka titik koma karena membuat kode lebih mudah dibaca, tetapi opsional dalam JavaScript. Saat dihilangkan, mereka akan dimasukkan secara otomatis. Spesifikasi resmi EcmaScript memiliki info ini: "Selain itu, terminator baris, meskipun tidak dianggap sebagai token, juga menjadi bagian dari aliran elemen masukan dan memandu proses penyisipan titik koma otomatis (11.9)." dari: tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars yang mengarah ke ini: tc39.github.io/ecma262/#sec-automatic-semicolon-insertion Jadi secara teknis, kedua contoh kode Anda adalah JS yang benar & valid.
Clomp


3

Saya mendapat kesalahan ini karena dalam kode saya, saya salah mengeja definisi komponen dengan huruf kecil, react.createClassbukan huruf besar React.createClass.


1

Saya menghadapi masalah yang sama. Saya menyelesaikannya dengan mengimpor Reactdan ReactDOMmenyukai sebagai berikut:

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

1

Jika Anda menggunakan Babel dan React 17, Anda mungkin perlu menambahkan "runtime2:" automatic "ke konfigurasi.

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


0

Jika Anda menggunakan TypeScript, pastikan Anda tsconfig.jsonmemilikinya di "jsx": "react"dalamnya "compilerOptions".

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.