Uncaught ReferenceError: React не визначено


89

Я намагаюся змусити ReactJS працювати з рейками, використовуючи цей підручник. Я отримую цю помилку:


Uncaught ReferenceError: React is not defined

Але я можу отримати доступ до об'єкта React у консолі браузера, я також додав public / dist / turbo-response.min.js, як описано тут, а також додав рядок у application.js, як описано у цій відповіді, щоб не везти. Крім того, видає помилку:введіть тут опис зображення
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

Хтось може підказати мені, як це вирішити?

[EDIT 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>

Відповіді:


91

Мені вдалося відтворити цю помилку, коли я використовував webpack для створення свого javascript із наступним фрагментом у моєму webpack.config.json:

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

Ця вищевказана конфігурація говорить webpack не вирішувати проблеми require('react'), завантажуючи модуль npm, а натомість очікувати глобальної змінної (тобто для windowоб’єкта), що викликається React. Рішення полягає в тому, щоб або вилучити цю частину конфігурації (так React буде в комплекті з вашим javascript), або завантажити фреймворк React зовні перед тим, як цей файл буде запущений (таким, що window.Reactіснує).


4
Видалення цієї конфігурації вирішило проблему для мене.
DJ2

Видалення цієї конфігурації вирішило проблему і для мене
coinhndp

50

Я отримав цю помилку, оскільки використовував

import ReactDOM from 'react-dom'

без імпорту реакції, як тільки я змінив його на нижче:

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

Помилка була вирішена :)


(плюс 1) - Має цілковитий сенс
Пол Самсота

2
Працює! Це трохи несподівано з такої мови, як Python. Якщо я використовую лише ReactDOMв основному файлі, я думав, що можу (і повинен) позбутися посилання на React. Ну добре, чогось навчився.
jdm

35

Можливі причини: 1. ви не завантажили React.JS на свою сторінку, 2. ви завантажили його після наведеного вище сценарію на свою сторінку. Рішенням є завантаження файлу JS перед наведеним вище сценарієм.

PS

Можливі рішення.

  1. Якщо ви згадаєте reactу розділі зовнішніх елементів конфігурації веб-пакета, то вам слід завантажувати реагуючі файли js безпосередньо у ваш htmlbundle.js
  2. Переконайтеся, що у вас є лінія import React from 'react';


14

Спробуйте додати:

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

перед render()функцією.

Це іноді запобігає поверненню помилки:

Реакція не визначена

Додавання Reactу вікно вирішить ці проблеми.


1
Останній рядок для мене був відсутньою частиною.
Тасос К.

11

Додавання до Santosh:

Ви можете завантажити React до

import React from 'react'

1
@zero_cool Я люблю крапку з комою, оскільки це полегшує читання коду, але вони не обов’язкові в JavaScript. Якщо опустити, вони будуть автоматично вставлені. Офіційна специфікація EcmaScript містить таку інформацію: "Більше того, термінатори рядків, хоча і не вважаються маркерами, також стають частиною потоку вхідних елементів і керують процесом автоматичної вставки крапки з комою (11.9)". з: tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars, що вказує на це: tc39.github.io/ecma262/#sec-automatic-semicolon-insertion Отже технічно, обидва приклади коду є правильний і дійсний JS.
Кломп


3

Я отримав цю помилку, оскільки у своєму коді я неправильно написав визначення компонента з нижньої літери react.createClassзамість великої React.createClass.


1

Я стикався з тим же питанням. Я вирішив це, імпортуючи Reactта ReactDOMподібно до цього:

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


0

Якщо ви використовуєте TypeScript, переконайтеся, що у вас tsconfig.jsonє "jsx": "react"всередині "compilerOptions".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.