Подтвердить что ты не робот

Ошибка с базовым примером React: Uncaught TypeError: undefined не является функцией

Я пытаюсь подключиться к моему приложению. Это приложение для рельсов, использующее rails-react (хотя я не думаю, что часть проблемы). В настоящее время я использую очень простую 1-компонентную настройку:

// react_admin.js.jsx

/** @jsx React.DOM */
var CommentBox = React.createClass({
  render: function() {
    return (
     <div className="commentBox">
       Hello, world! I am a CommentBox.
      </div>
   );
  }
});

React.render(
  <CommentBox />,
  document.getElementById('content')
);

Мой файл html содержит:

<body>
  <div id="content"></div>
  <script src="/assets/react.js?body=1"></script>
  <script src="/assets/react_admin.js?body=1"></script>
</body>

Я вижу, что rails-react преобразует myaction_admin.js.jsx в response_admin.js следующим образом:

/** @jsx React.DOM */

var CommentBox = React.createClass({displayName: 'CommentBox',
  render: function() {
    return (
      React.DOM.div({className: "commentBox"}, 
        "Hello, world! I am a CommentBox."
      )
    );
  }
});

React.render(
  CommentBox(null),
  document.getElementById('content')
);

Однако хром поднимает "Uncaught TypeError: undefined не является функцией" в вызове Render.react(), который он показывает между "(" и "CommentBox (null)"

Может кто-нибудь сказать мне, что я делаю неправильно?

4b9b3361

Ответ 1

После 0,14 React переместился на ReactDOM.render(), поэтому, если вы обновите React, ваш код должен быть:

ReactDOM.render(
  <CommentBox />, document.getElementById('content'));

Но не забудьте включить в проект как react.js, так и react-dom.js, так как они теперь разделены.

Ответ 2

Вы должны обновиться до последней библиотеки React.

Некоторые учебные пособия были обновлены для использования React.render() вместо устаревших React.renderComponent(), но авторы по-прежнему предоставляют ссылки на более старые версии или React, которые не имеют новейшего метода render().

Ответ 3

Я не очень хорошо знаком с React, но похоже, что вы должны использовать React.renderComponent вместо React.render

Запустив код, сгенерированный rails-react локально в моем браузере и играя с объектом React, похоже, что метод render не существует. Вместо этого React содержит метод renderComponent:

enter image description here

Если вы измените код для использования React.renderComponent вместо React.render, компонент будет отображаться в DOM.

Вы можете увидеть, как он работает здесь: http://jsfiddle.net/popksfb0/

Ответ 4

После того, как 0.13.x React переместил React.renderComponent() в React.render().

Ответ 5

По неизвестным мне причинам мне пришлось обернуть мой в {}

Итак, из:

import React from "react";
import render from "react-dom";
import Router from "./Router";

render(Router, document.getElementById ('app'));

To (Работа):

import React from "react";
import {render} from "react-dom";
import Router from "./Router";

render(Router, document.getElementById ('app'));

Ответ 6

React.render был представлен в версии 0.12, как описано здесь: https://facebook.github.io/react/blog/2014/10/28/react-v0.12.html

Чтобы исправить обновление проблемы до этой версии или выше. На момент написания последней версии 0.13.3.

Ответ 7

Здесь полный script, ссылающийся на ваш исходный код.

<style>
    .commentBox{
        color:red;
        font-size:16px;
        font-weight:bold
    }
</style>

<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>

<script type="text/babel">
    var CommentBox = React.createClass({
        render: function(){
            return (
              React.DOM.div({className: "commentBox"}, 
                "Hello, world! I am a CommentBox."
              )
            );
        }
    });

    ReactDOM.render(
        <CommentBox/>,
        document.getElementById('content')
    );
</script>

Ответ 8

Для новичков ошибка (тип/ undefined равна undefined) также может отображаться из-за размещения блока кода React.render.

Он должен быть размещен после создания компонентов, предпочтительно внизу.