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>
sky_coder123
sumber

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

Barnasaurus Rex
sumber
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 :)

Akshat Gupta
sumber
(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';
J Santosh
sumber
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.

Santosh Suryawanshi
sumber
1
Baris terakhir adalah bagian yang hilang bagiku.
Tasos K.
11

Menambahkan ke Santosh:

Anda dapat memuat React dengan

import React from 'react'
Imamudin Naseem
sumber
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
import React, { Component, PropTypes } from 'react';

Ini juga bisa berhasil!

Abraham Jagadeesh
sumber
3

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

pengembara
sumber
1

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

import React from 'react';
import ReactDOM from 'react-dom';
anand shukla
sumber
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"
     }]]
 }
Jkarttunen
sumber
0

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

semu
sumber