React.js输出到jsc:ReferenceError:<component>未定义</component>

时间:2014-03-02 17:08:00

标签: reactjs

我在rails项目中使用react-rails gem。虽然javascriptjsx一致,但我的coffeescript文件似乎无法正常工作。请注意,我正在尝试使用纯coffeescript解决方案,没有内插的jsx。

在我的coffeescript文件中(其扩展名为*.js.coffee

{div} = React.DOM

Hello = React.createClass
  render: ->
    (div {}, ['Hello ' + @props.name])

在我看来:

= react_component 'Hello', name: 'World'

这是我一直在我的控制台中出现的错误:

ReferenceError: Hello is not defined

1 个答案:

答案 0 :(得分:9)

取自react-rails回购中的我的GitHub issue,jakubmal回答:

  

CoffeeScript创建一个闭包,看起来很像:

(function() {
  var div, hello;

  div = React.DOM.div;

  Hello = React.createClass({
    render: function() {
      return div({}, ['Hello ' + this.props.name]);
    }
  });
}).call(this);
     

在关闭之外使Hello无法访问。

     

您可以做的是将Hello分配给窗口,如:

window.Hello = React.createClass
     

或使用快捷方式/技巧:

@Hello = React.createClass
     

为了保持您的应用结构清洁,您需要至少应用一个   命名空间模式。   http://addyosmani.com/blog/essential-js-namespacing/

此外,在react-rails google小组中,Paul O'Shannessy写道:

  

帮助程序非常天真,并期望您的组件可用作全局变量。 Coffeescript将每个文件包装在一个闭包中,然后它们被链轮连接起来,这违反了全局假设。这是在开发过程中出现的,但我们决定某些人会比任何人都更好。