Yakalanmamış Referans Hatası: Tepki tanımlanmadı


94

Bu öğreticiyi kullanarak ReactJS'in raylarla çalışmasını sağlamaya çalışıyorum . Bu hatayı alıyorum:


Uncaught ReferenceError: React is not defined

Ama tarayıcı konsoluna nesneyi tepki erişebilir Ben de eklendi kamu / dist / turbo react.min.js açıklandığı gibi burada da ilave açıklandığı gibi application.js hattını bu cevap hayır şans. Ek olarak, şu hatayı verir:görüntü açıklamasını buraya girin
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

Biri bana bunu nasıl çözeceğimi önerebilir mi?

[DÜZENLE 1]
Referans için kaynak kodu:
Bu benim comments.js.jsxdosyam:

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

Ve bu benim index.html.erb:

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

Yanıtlar:


92

Javascript'imi aşağıdaki parçamda oluşturmak için webpack'i kullanırken bu hatayı yeniden oluşturabildim webpack.config.json:

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

Yukarıdaki bu yapılandırma, webpack'e require('react')bir npm modülü yükleyerek çözümlememesini , bunun yerine çağrılan bir genel değişken (yani windownesnede) beklemesini söyler React. Çözüm, ya bu konfigürasyon parçasını kaldırmak (yani React, javascript'inizle birlikte paketlenecek) ya da React çerçevesini bu dosya çalıştırılmadan önce (böylece window.Reactvar olacak şekilde) harici olarak yüklemektir .


4
Bu yapılandırmanın kaldırılması sorunu benim için çözdü.
DJ2

Bu yapılandırmayı kaldırmak benim için de sorunu çözdü
coinhndp

teşekkürler, bu da bana yardımcı oldu.
Rnd

54

Bu hatayı aldım çünkü kullanıyordum

import ReactDOM from 'react-dom'

react'i içe aktarmadan, aşağıdaki şekilde değiştirdikten sonra:

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

Hata çözüldü :)


(artı 1) - Çok mantıklı
Paul Samsotha

2
İşler! Bu Python gibi bir dilden gelmesi biraz beklenmedik bir durum. Yalnızca ReactDOMana dosyamda kullanıyorsam , referansından kurtulabileceğimi (ve yapmam gerektiğini) düşündüm React. Oh pekala, bir şey öğrendim.
jdm


35

Olası nedenler şunlardır: 1. React.JS'yi sayfanıza yüklemediniz, 2. Sayfanıza yukarıdaki koddan sonra yüklediniz. Çözüm, JS dosyasını yukarıda gösterilen komut dosyasından önce yüklemektir.

PS

Muhtemel çözümler.

  1. Web reactpaketi yapılandırması içindeki harici bölümünden bahsediyorsanız, daha önce react js dosyalarını doğrudan html'nize yüklemelisiniz.bundle.js
  2. Hattın olduğundan emin ol import React from 'react';

15

Eklemeyi deneyin:

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

render()işlevden önce .

Bu bazen, pop-up'ın geri gelmesini engeller:

React tanımlanmadı

ReactPencereye eklemek bu sorunları çözecektir.


1
Son satır, benim için eksik kısımdı.
Tasos K.

11

Santosh'a ekleniyor:

React'i şu şekilde yükleyebilirsiniz:

import React from 'react'

1
@zero_cool Kodun okunmasını kolaylaştırdığı için noktalı virgüllere bayılırım, ancak JavaScript'te isteğe bağlıdırlar. Atlandığında, otomatik olarak eklenirler. Resmi EcmaScript spesifikasyonunda şu bilgiler bulunur: "Ayrıca, satır sonlandırıcılar, simge olarak kabul edilmese de, giriş öğeleri akışının bir parçası haline gelir ve otomatik noktalı virgül ekleme sürecini yönlendirir (11.9)." from: tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars şuna işaret eder: tc39.github.io/ecma262/#sec-automatic-semicolon-insertion Teknik olarak, kod örneklerinizin ikisi de doğru ve geçerli JS.
Clomp


3

Bu hatayı aldım çünkü kodumda bir bileşen tanımını react.createClassbüyük harf yerine küçük harfle yanlış yazdım React.createClass.


1

Ben de aynı sorunla karşı karşıyaydım. Ben ithal ederek bunu çözüldü Reactve ReactDOMaşağıdaki gibi gibi:

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

1

Babel ve React 17 kullanıyorsanız, yapılandırmaya "runtime2:" automatic "eklemeniz gerekebilir.

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


0

TypeScript kullanıyorsanız tsconfig.json, "jsx": "react"içinde bulunduğunuzdan emin olun "compilerOptions".

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.