未捕获的ReferenceError:未定义React
我正在尝试使用本教程来使ReactJS在rails中工作。 我得到这个错误:
Uncaught ReferenceError: React is not defined
但是我可以在浏览器控制台中访问React对象
我还join了public / dist / turbo-react.min.js ,并且在application.js中添加了//= require components
行,就像这个答案中描述的那样 ,没有运气。 另外,
var React = require('react')
给出错误:
Uncaught ReferenceError: require is not defined
任何人都可以build议我如何解决这个问题?
[编辑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>
当我使用webpack在webpack.config.json中使用以下块创build我的JavaScript时,我能够重现此错误:
externals: { 'react': 'React' },
这个上面的configuration告诉webpack不通过加载一个npm模块来parsingrequire('react')
,而是期望一个名为React
的全局variables(即在window
对象上)。 解决的办法是删除这段configuration(所以React将与你的javascript捆绑在一起),或者在执行这个文件之前从外部加载React框架(以便window.React
存在)。
可能的原因是1.您没有将React.JS加载到您的页面中,2.您已将上面的脚本加载到您的页面中。 解决方法是在上面显示的脚本之前加载JS文件。
PS
可能的解决scheme。
- 如果你在webpackconfiguration里面的externals部分提到了
react
,那么你必须在bundle.js
之前直接加载js文件到你的html中 - 确保你已经
import React from 'react';
行import React from 'react';
如果你正在使用Webpack,你可以在需要的时候加载React,而不必在你的代码中明确地require
它。
添加到webpack.config.js :
plugins: [ new webpack.ProvidePlugin({ "React": "react", }), ],
请参阅http://webpack.github.io/docs/shimming-modules.html#plugin-provideplugin
我得到这个错误,因为我正在使用
import ReactDOM from 'react-dom'
没有导入反应,一旦我把它改为如下:
import React from 'react'; import ReactDOM from 'react-dom';
错误已解决:)
添加到Santosh:
你可以加载反应
import React from 'react'
import React, { Component, PropTypes } from 'react';
这也可能工作!
我得到了这个错误,因为在我的代码中,我用小写的react.createClass而不是大写的React.createClass拼错了一个组件定义。